【问题标题】:wizard and asyncfileupload in next step下一步中的向导和异步文件上传
【发布时间】: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


【解决方案1】:

将属性:enctype="multipart/form-data" 添加到您的 &lt;form&gt; 标记中。

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

【讨论】:

  • 有趣的是,如果我将隐藏的 AsyncFileUpload 添加到我的控件中,它无需这些修改即可工作。如果我有 MaterPage 并且在其中显示我的所有控件,我应该向它添加该属性吗?
  • 是的,如果您使用的是主文件,请将其添加到母版页的表单标签
猜你喜欢
  • 2013-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多