【发布时间】:2013-09-11 09:53:31
【问题描述】:
在我的 ASP.NET .NET 3.5 中,我有自定义控件,其中包含 UpdatePanel。
在该更新面板中,我通过 7 个步骤进行向导控制。
在第二步中,我想使用 AsyncFileUpload 上传附件。
在我的场景中,用户可以添加多个文件,它们将显示在网格内,因此上传后他可以向它们添加 cmets。
如果我在开始时可见的 Step 中有 AsyncFileUpload,那么所有工作文件都会正确触发 UploadedComplete 事件,但是当我从不同的步骤开始时,我无法让 Upload 工作。
我正在考虑使用 iframe,但我想避免它,因为我需要在不同的步骤中有 5 个上传组件。
是否可以让 AsyncFileUpload 在 Wizard 中工作?
我的代码是标准的,目前没有什么神奇的:
工具包脚本管理器
更新面板
-内容模板
--向导
---向导步骤
----向导步骤 1
----向导步骤 2
-----异步文件上传
----向导步骤 3
----向导步骤 4
-----异步文件上传 1
-----异步文件上传 2
----向导步骤 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>
现在我的上传工作正常,但我想要正常的解决方案而不是那种解决方法。
【问题讨论】:
-
你能张贴你的步骤标记
-
@FlopScientist 我刚刚用更多代码和临时解决方案修改了我的问题。
标签: asp.net updatepanel asp.net-3.5 asyncfileupload aspwizard