мастер и asyncfileupload на следующем шаге

В моем ASP.NET .NET 3.5 у меня есть настраиваемый элемент управления, внутри которого есть UpdatePanel.
На этой панели обновлений я управляю мастером с 7 шагами.
На втором шаге я хочу загрузить вложения с помощью AsyncFileUpload.
В моем сценарии пользователь может добавить несколько файлов, и они будут отображаться внутри сетки, поэтому после загрузки он может добавлять к ним комментарии.
Все работает, файл, если у меня есть AsyncFileUpload в шаге, который виден в начале, событие UploadedComplete запускается правильно , но когда я начинаю с другого шага, я не могу заставить эту загрузку работать.

Я думал об использовании 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>

и теперь моя загрузка работает, но мне нужно обычное решение вместо этого обходного пути.


person Misiu    schedule 11.09.2013    source источник
comment
Можете ли вы опубликовать разметку ваших шагов   -  person R.C    schedule 11.09.2013
comment
@FlopScientist Я только что изменил свой вопрос, добавив больше кода и временное решение.   -  person Misiu    schedule 11.09.2013


Ответы (1)


Добавьте атрибут: enctype="multipart/form-data" в свой <form> тег.

<form id="form1" runat="server" enctype="multipart/form-data">
 ...
 ...
</form>
person R.C    schedule 12.09.2013
comment
Самое смешное, что он работает без этих модификаций, если я добавляю скрытый AsyncFileUpload в свой элемент управления. Если у меня есть MaterPage, и внутри него я показываю все свои элементы управления, нужно ли мне добавить к нему этот атрибут? - person Misiu; 12.09.2013
comment
Да, добавьте это в тег формы на главной странице, если вы используете мастер-файлы. - person R.C; 12.09.2013