ASP.NET - загрузка файла с помощью триггера PostBack - PullRequest
3 голосов
/ 07 мая 2010

У меня есть UpdatePanel, который имеет элемент управления загрузкой и кнопку для загрузки.Кнопка установлена ​​как триггер, но обработчик события для кнопки не выполняется на первом PostBack.

Мой код ASPX:

<asp:UpdatePanel ID="updPages" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <div class="tabs">
            <ul>
                <li><asp:LinkButton ID="lnkContentsPages" runat="server" OnClick="updateContents" CommandArgument="pages">Pages</asp:LinkButton></li>
        <%-- these tabs change the ActiveViewIndex to show a different UserControl --%>
                <li><asp:LinkButton ID="lnkContentsImages" runat="server" OnClick="updateContents" CommandArgument="images">Images</asp:LinkButton></li>
            </ul>
            <div class="tabbedContent">
                <asp:MultiView runat="server" ID="mltContentsInner" ActiveViewIndex="0">
                    <asp:View ID="viwContentsImages" runat="server">
                        // ajax usercontrol for a list of images - works fine with ajax
                        <fieldset>
                            <legend>Upload New</legend>
                            <div class="formRow">
                                <asp:Label ID="lblFile" runat="server" Text="Filename" AssociatedControlID="uplFile" />
                                <asp:FileUpload ID="uplFile" runat="server" />
                            </div>
                            <div class="formRow">
                                <asp:Label ID="lblImageDescription" runat="server" Text="Description" AssociatedControlID="txtImageDescription" />
                                <asp:TextBox runat="server" ID="txtImageDescription" />
                            </div>
                            <asp:Button ID="btnUpload" runat="server" Text="Upload" CssClass="c3button btnUpload" CausesValidation="false" OnClick="btnUpload_Click" />
                        </fieldset>
                    </asp:View>
                    <asp:View ID="viwContentsPages" runat="server">
                        // ajax usercontrol - works fine with ajax
                    </asp:View>
                </asp:MultiView>
            </div>
        </div>
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="btnUpload" />
    </Triggers>
</asp:UpdatePanel>

Кнопка работает в обязательном порядке во второй и последующие моменты времени, только не в первый.Есть ли причина для этого?

Ответы [ 4 ]

3 голосов
/ 16 января 2013

необходимо добавить enctype = "multipart / form-data" в тег формы страницы.

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

1 голос
/ 07 мая 2010

Может быть, он делает постбэк AJAX в первый раз? На вашем UpdatePanel попробуйте добавить атрибут ChildrenAsTriggers="false".

Это остановит все элементы управления в UpdatePanel, вызывающие асинхронные обратные передачи, поэтому для каждого элемента управления, который хочет, чтобы вызывал обратную передачу, вам придется добавить AsyncPostBackTrigger в раздел Triggers UpdatePanel. .

1 голос
/ 07 мая 2010

Я не знаю, почему это происходит. Однако вы можете попытаться добавить событие самостоятельно, переопределив событие цикла страницы OnInit в файле aspx.cs. Не забудьте удалить событие Click со своей HTML-страницы.

protected override void OnInit(EventArgs e)
{

btnUpload.Click+= new EventHandler(btnUpload_Click);
base.OnInit(e);
}

В качестве альтернативы триггер также может быть расположен непосредственно под тегом UpdatePanel

<asp:UpdatePanel ID="updPages" runat="server" UpdateMode="Conditional">  
 <Triggers> 
        <asp:PostBackTrigger ControlID="btnUpload" /> 
    </Triggers> 
0 голосов
/ 20 января 2014

Согласно ответу anbalagan и ответу на другой вопрос, вы должны изменить свойство enctype элемента формы на «multipart / form-data». Как сказано в лучшем ответе этого вопроса, 'multipart / form-data' следует использовать всякий раз, когда вы пишете код на стороне клиента и вам необходимо отправить файлы на сервер, например, использовать элементы управления FileUpload.

У меня была такая же проблема, как и у вас, я изменил тип формы и теперь все работает нормально.

...