全部,我正在为通过电子邮件请求工单的网站维护一些旧的.ASP代码。该站点正常工作,直到最近迁移到IIS 7.5服务器。我不得不重新编写在ASP.NET中使用C#代码进行文件上传的部分,并且无法将String从新旧传递到旧版本。
以前,.ASP代码使用ASPupload组件,出于合理的原因,新组件服务器不再支持该组件。 ASPupload用于将两个上传的文件名(通过JavaScript作为隐藏的输入值)传递给.ASP代码的一部分,该部分使用这些文件名作为字符串(加上它已经拥有的路径字符串)。然后.ASP代码将文件附加到发送给履行工单的公司的电子邮件中。
我想采用新的C#全局字符串变量并将其传递给发送电子邮件的旧.ASP代码,因为它仍像魅力一样。
我已经在这个问题上发展了Code Behind和ASP.NET,以反映Manoj Kumar Sharma's优秀的JavaScript,它将C#全局字符串变量作为JavaScript变量发送到ASP.NET代码,我最初遇到了问题。谢谢!!!现在我们需要弥合新的ASP.NET代码和旧的.ASP代码之间的差距。
以下是C#Code Behind(感谢编辑Mason,现在更新此帖更容易了):
// From https://support.microsoft.com/en-us/kb/323246
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace CSharpUpload
{
/// <summary>
/// Browse to two files, upload to path on Server. Check if files haven't been downloaded, pass name.
/// </summary>
public class Scott_upload : System.Web.UI.Page
{
protected System.Web.UI.HtmlControls.HtmlInputFile File_Upload_1;
protected System.Web.UI.HtmlControls.HtmlInputFile File_Upload_2;
protected System.Web.UI.HtmlControls.HtmlInputButton Submit_Upload;
public string UpFileName1 { get; set; }
public string UpFileName2 { get; set; }
public int File_Count;
public bool Dont_show_buttons;
private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Submit_Upload.ServerClick += new System.EventHandler(this.Submit_Upload_ServerClick);
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void Submit_Upload_ServerClick(object sender, System.EventArgs e)
{
bool no_file_selected = true;
File_Count = 0;
if( ( File_Upload_1.PostedFile != null ) && ( File_Upload_1.PostedFile.ContentLength > 0 ) )
{
string fn_1 = System.IO.Path.GetFileName(File_Upload_1.PostedFile.FileName);
string server_path_string_1 = @"Data\";
string SaveLocation_1 = Server.MapPath(server_path_string_1) + fn_1;
try
{
File_Upload_1.PostedFile.SaveAs(SaveLocation_1);
this.UpFileName1 = fn_1;
File_Count = File_Count + 1;
Dont_show_buttons = true;
no_file_selected = false;
Response.Write("\nUpload Document 1 \"");
Response.Write(fn_1);
Response.Write("\" has been SUCCESSFULLY uploaded!\n");
}
catch ( Exception ex )
{
Response.Write("Error: " + ex.Message);
//Note: Exception.Message returns a detailed message that describes the current exception.
//For security reasons, we do not recommend that you return Exception.Message to end users in
//production environments. It would be better to return a generic error message.
}
}
if( ( File_Upload_2.PostedFile != null ) && ( File_Upload_2.PostedFile.ContentLength > 0 ) )
{
string fn_2 = System.IO.Path.GetFileName(File_Upload_2.PostedFile.FileName);
string server_path_string_2 = @"Data\";
string SaveLocation_2 = Server.MapPath(server_path_string_2) + fn_2;
try
{
File_Upload_2.PostedFile.SaveAs(SaveLocation_2);
this.UpFileName2 = fn_2;
File_Count = File_Count + 1;
Dont_show_buttons = true;
no_file_selected = false;
Response.Write("\nUpload Document 2 \"");
Response.Write(fn_2);
Response.Write("\" has been SUCCESSFULLY uploaded!\n");
}
catch ( Exception ex )
{
Response.Write("Error: " + ex.Message);
//Note: Exception.Message returns a detailed message that describes the current exception.
//For security reasons, we do not recommend that you return Exception.Message to end users in
//production environments. It would be better to return a generic error message.
}
}
if (no_file_selected)
{
Response.Write("\nPLEASE SELECT A FILE TO UPLOAD\n");
}
}
}
}
。这是新的ASP.NET,它可以将文件名看作&#34; upFileName1&#34;和&#34; upFileName2&#34;:
<%@ Page language="c#" src="Scott_upload.aspx.cs" AutoEventWireup="false" Inherits="CSharpUpload.Scott_upload"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Scott_upload</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name=vs_defaultClientScript content="JavaScript">
<meta name=vs_targetSchema content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Scott_file_upload" method="post" enctype="multipart/form-data" runat="server">
<% if (Dont_show_buttons == false) { %>
<div>
Schedule A&B are required to complete the survey within 3 days.
<br><br>
Upload Document 1 <INPUT type=file id=File_Upload_1 name=File_Upload_1 runat="server" />
<br>
</div>
<div>
<br>
Upload Document 2 <INPUT type=file id=File_Upload_2 name=File_Upload_2 runat="server" />
<br>
</div>
<div>
<br><br>
<input type="submit" id="Submit_Upload" value="Click To Upload File(s)" NAME="Submit_Upload" runat="server" />
<br>
</div>
<% } %>
<% else { %>
<div>
<br><br>
Upload(s) COMPLETE.
<br>
</div>
<% } %>
</form>
<script type="text/javascript">
var upFileName1 = '<%= this.UpFileName1 %>';
var upFileName2 = '<%= this.UpFileName2 %>';
' The code behind filenames are now appearing in the ASP.NET
document.write(upFileName1);
document.write(upFileName2);
</script>
</body>
</HTML>
现在是第三个请求的部分,旧的.ASP代码。请原谅,我没有写,但必须保持它(我更具体的变量名称)。首先是一个调用&#34; Scott_upload.aspx&#34;来自订单请求表单中的iframe(注意旧的隐藏输入&#34; UploadedFile&#34; ASPupload曾经使用过):
<html>
<!-- ... -->
<body>
<!-- ... -->
<table class="tblw" border="0" cellpadding="0" cellspacing="0" align="center" ID="Table5">
<tr>
<form name="frmRequest" method="post" action="format_email.asp">
<!-- ... -->
<table class="tblw" border="0" cellpadding="0" cellspacing="0" align="center" ID="Table13">
<tr>
<input type="hidden" name="UploadedFile1" value="" ID="UploadedFile1id">
<input type="hidden" name="UploadedFile2" value="" ID="UploadedFile2id">
<td class="container" align="center">
<iframe src="Scott_upload.aspx" width=520 height=140 name="upload" scrolling="yes" scrollbars="yes" frameborder="0" border="0" style="border:0px;padding:0px;margin:0px;overflow:visible;">
</iframe>
</td>
</tr>
</table>
<!-- ... -->
<input type="button" name="btn" value="REQUEST ORDER" class="submitbtn" onClick="validateForm();">
</tr>
</form>
</table>
<% Server.Execute %>
</body>
</html>
现在,其他人写的旧上传代码对隐藏输入值进行了一些JavaScript操作(在另一个iframe中,在另一个形式内,IKR?!),这在我的.ASPX中无效:
<script language="javascript">
<% If Count = 1 Or Count = 2 Then %>
window.parent.document.getElementById("UploadedFile1id").value = document.frmUpload.FileName1.value;
<% End If %>
<% If Count = 2 Then %>
window.parent.document.getElementById("UploadedFile2id").value = document.frmUpload.FileName2.value;
<% End If %>
</script>
然后在&#34; format_email.asp&#34;文件名字符串分配了这一行:
strUpload1 = Trim(Request.Form("UploadedFile1"))
strUpload2 = Trim(Request.Form("UploadedFile2"))
我如何获得&#34; upFileName1&#34;和&#34; upFileName2&#34;来自&#34; Scott_upload.aspx&#34;分配给&#34; strUpload1&#34;的页面和&#34; strUpload2&#34;在旧的&#34; format_email.asp&#34;网页?
答案 0 :(得分:1)
你可以试试这个:
将两个变量声明为Page的属性(类似这样):
public class Scott_upload : System.Web.UI.Page
{
public string UpFileName1 { get; set; }
public string UpFileName2 { get; set; }
...
然后在.ASPX页面中,您有javascript代码,将值嵌入到javascript变量中(如下所示):
<script type="text/javascript">
var upFileName1 = '<%= this.UpFileName1 %>';
var upFileName2 = '<%= this.UpFileName2 %>';
</script>
希望这有帮助。