我有一个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>
按钮在第二次和随后的时间内都能正常工作,而不是第一次。这有什么理由吗?
答案 0 :(得分:3)
需要在页面的表单标记中添加enctype =“multipart / form-data”。
面临同样的问题,上面的工作使它在第一次尝试时上传文件。希望有人会觉得它很有用。
答案 1 :(得分:1)
我不知道为什么会这样。但是,您可以通过覆盖aspx.cs文件中的OnInit页面循环事件来尝试自己添加事件。请记住从HTML页面中删除Click事件。
protected override void OnInit(EventArgs e)
{
btnUpload.Click+= new EventHandler(btnUpload_Click);
base.OnInit(e);
}
或者,Trigger可能还需要直接位于UpdatePanel标记
下面<asp:UpdatePanel ID="updPages" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
答案 2 :(得分:1)
也许是第一次进行AJAX回发?在UpdatePanel
上,尝试添加属性ChildrenAsTriggers="false"
。
这将停止UpdatePanel中的任何控件导致异步回发,因此对于您想要导致回发的每个控件,您必须在UpdatePanel的AsyncPostBackTrigger
中添加Triggers
{1}}部分。
答案 3 :(得分:0)
根据anbalagan的回答和另一个问题的答案,您应该将表单元素的enctype属性更改为“multipart / form-data”。正如在this question's最佳答案中所说,每当您编写客户端代码并且需要将文件发布到服务器时,应该使用'multipart / form-data',例如使用FileUpload控件。
我和你的问题一样,改变了表格的enctype,现在一切正常。