1

私の ASP.NET .NET 3.5 には、内部に UpdatePanel を持つカスタム コントロールがあります。
その更新パネルでは、7 つのステップでウィザードを制御します。
2 番目のステップでは、AsyncFileUpload を使用して添付ファイルをアップロードします。
私のシナリオでは、ユーザーは複数のファイルを追加でき、それらはグリッド内に表示されるため、アップロード後にコメントを追加できます。
最初に表示されるステップに AsyncFileUpload がある場合、すべてが正常に動作し、UploadedComplete イベントが正しく発生しますが、別のステップから開始すると、そのアップロードが機能しません。

iframe を使おうと思っていたのですが、異なる Step で 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>

現在、アップロードは機能していますが、その回避策ではなく通常の解決策が必要です。

4

1 に答える 1

3

enctype="multipart/form-data"属性:を<form>タグに追加します。

<form id="form1" runat="server" enctype="multipart/form-data">
 ...
 ...
</form>
于 2013-09-12T04:26:39.433 に答える