【问题标题】:ASP.NET - FileUpload with PostBack TriggerASP.NET - 带有 PostBack 触发器的文件上传
【发布时间】:2010-05-07 11:57:08
【问题描述】:

我有一个 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>

该按钮在第二次和随后的时间都可以正常工作,但不是第一次。这有什么原因吗?

【问题讨论】:

  • 运气好能解决这个问题吗?
  • 很遗憾没有。行为似乎是断断续续的,这是最糟糕的错误类型。
  • 可以添加服务器端代码吗?
  • 我会把它剥离到裸露的骨头上。更新面板和按钮并查看它是否触发,然后开始添加控件并一次重新编写一个代码以查看发生了什么故障。它。
  • 第一次不会触发,即使只有按钮。

标签: asp.net ajax updatepanel postback


【解决方案1】:

需要在页面的form标签中添加enctype="multipart/form-data"。

遇到了同样的问题,上面的解决方法使它在第一次尝试上传文件。希望有人会觉得它有用。

【讨论】:

    【解决方案2】:

    我不知道为什么会这样。但是,您可以尝试通过覆盖 aspx.cs 文件中的 OnInit 页面循环事件来自己添加事件。请记住从您的 HTML 页面中删除 Click 事件。

    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> 
    

    【讨论】:

      【解决方案3】:

      也许它是第一次进行 AJAX 回发?在您的UpdatePanel 上,尝试添加属性ChildrenAsTriggers="false"

      这将阻止 UpdatePanel 中导致异步回发的任何控件,因此对于您想要导致回发的每个控件,您必须在 UpdatePanel 的 Triggers 中添加一个 AsyncPostBackTrigger部分。

      【讨论】:

      • 我没想过,但没有效果。
      【解决方案4】:

      根据 anbalagan 的回答和另一个问题的回答,您应该将表单元素的 enctype 属性更改为“multipart/form-data”。正如this question's 最佳答案中所说,每当您编写客户端代码并需要将文件发布到服务器时,都应使用“multipart/form-data”,例如使用 FileUpload 控件。

      我遇到了和你一样的问题,更改了表单的编码类型,现在一切正常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 2012-04-20
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        相关资源
        最近更新 更多