私の 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>
現在、アップロードは機能していますが、その回避策ではなく通常の解決策が必要です。