向导和asyncfileupload在下一步中

时间:2013-09-11 09:53:31

标签: asp.net updatepanel asp.net-3.5 asyncfileupload aspwizard

在我的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>

现在我的上传工作正常,但我想要正常的解决方案,而不是那种解决方法。

1 个答案:

答案 0 :(得分:3)

将属性enctype="multipart/form-data"添加到您的<form>标记。

<form id="form1" runat="server" enctype="multipart/form-data">
 ...
 ...
</form>