在我的ASP.NET .NET 3.5中,我有自定义控件,里面有UpdatePanel 在该更新面板中,我向导控制了7个步骤 在第二步中,我想使用AsyncFileUpload上传附件 在我的场景中,用户可以添加多个文件,它们将显示在网格内,因此在上传后,他可以为它们添加注释 如果我在开始时可见的步骤中有AsyncFileUpload,那么一切正常,UploadedComplete事件被正确触发,但是当我从不同的步骤开始时,我无法使该上传工作。
我在考虑使用iframe,但我想避免使用iframe,因为我需要在不同的步骤中拥有5个上传组件。
是否可以让AsyncFileUpload在向导中运行?
我的代码是标准的,没有什么神奇之处:
ToolkitScriptManager
UpdatePanel的
-ContentTemplate
--Wizard
--- WizardSteps
---- WizardStep 1
---- WizardStep 2
----- AsyncFileUpload
---- WizardStep 3
---- WizardStep 4
----- AsyncFileUpload 1
----- AsyncFileUpload 2
---- WizardStep 5
我的简单事件处理程序
protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
var fileUpload = (AjaxControlToolkit.AsyncFileUpload)sender;
if (fileUpload.HasFile)
{
string strPath = path + e.FileName;
AsyncFileUpload1.SaveAs(strPath);
}
}
正如我之前所写的那样,如果我从第2步开始(ActiveStepIndex = 1),我会得到那个事件。
这是我的ascx代码:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="PWS_Test.ascx.cs" Inherits="kontrolki_PWS_Test" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Wizard ID="Wizard1" runat="server" ActiveStepIndex="0">
<WizardSteps>
<asp:WizardStep runat="server" title="Step 1">
<asp:Label ID="Label1" runat="server" Text="Questions"></asp:Label>
<br/>
<asp:CheckBox ID="CheckBox1" runat="server" Text="One"/>
<br/>
<asp:CheckBox ID="CheckBox2" runat="server" Text="Two"/>
</asp:WizardStep>
<asp:WizardStep runat="server" title="Step 2">
<asp:Label ID="Label2" runat="server" Text="Choose Your image"></asp:Label>
<br />
<asp:AsyncFileUpload ID="AsyncFileUpload1" runat="server" FailedValidation="False" OnUploadedComplete="AsyncFileUpload1_UploadedComplete" />
</asp:WizardStep>
</WizardSteps>
</asp:Wizard>
</ContentTemplate>
</asp:UpdatePanel>
这是cs代码:
using System;
public partial class kontrolki_PWS_Test : System.Web.UI.UserControl
{
protected const string path = @"c:\temp\";
protected void Page_Load(object sender, EventArgs e)
{
}
protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
var fileUpload = (AjaxControlToolkit.AsyncFileUpload)sender;
if (fileUpload.HasFile)
{
string strPath = path + e.FileName;
AsyncFileUpload1.SaveAs(strPath);
}
}
}
当我从第2步开始时,这是有效的。
作为一种解决方法,我在向导之前在控件中创建了一个隐藏的div:
<div style="display: none">
<asp:AsyncFileUpload ID="AsyncFileUpload2" runat="server" />
</div>
现在我的上传工作正常,但我想要正常的解决方案,而不是那种解决方法。
答案 0 :(得分:3)
将属性enctype="multipart/form-data"
添加到您的<form>
标记。
<form id="form1" runat="server" enctype="multipart/form-data">
...
...
</form>