在我的应用程序中,我有一个简单的上传,其中包含jquery和自定义http处理程序绑定到按钮和更新面板以显示上传的文件名:
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:Button ID="btnUploadFile" runat="server" Text="Button" />
<%= System.DateTime.Now %>
<input id="File1" type="file" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
<ContentTemplate>
<br />
<br />
<%= System.DateTime.Now %>
<asp:Label ID="Label1" runat="server" Text="" ViewStateMode="Disabled"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
$(document).ready(function ()
{
$(function ()
{
$('#file_upload').fileUpload({
url: '../UploadHandler.ashx',
method: 'POST',
onLoadAll: function (list)
{
// __doPostBack('MainContent_UpdatePanel1', '');
}
});
});
$('#File1').hide();
$('#MainContent_btnUploadFile').click(function ()
{
$('#File1').click();
return false;
});
});
处理程序看起来:
public void ProcessRequest(HttpContext context)
{
HttpPostedFile uploadedfile = context.Request.Files[0];
string fileName = uploadedfile.FileName;
IMainFormViewPresenter presenter = Bootstrapper.ServiceLocator.GetService<IMainFormViewPresenter>();
//do sth..
presenter.SetFileInfo(fileName);
presenter.RefreshUpdatePanel();
}
并在视图中
public void RefreshUpdatePanel()
{
// UpdatePanel1.Update();
}
public void SetFileInfo(string fileName)
{
Label1.Text = fileName;
}
问题是,服务器代码中的UpdatePanel1.Update()不起作用。有时我会遇到异常:Update方法只能在Render之前在ID为“UpdatePanel1”的UpdatePanel上调用。
我无法知道发生了什么。更新面板从javascript工作正常刷新,但我很好奇为什么在服务器上有问题。 我放在https://dl-web.dropbox.com/get/Public/WebApplication1.rar?w=ea9959b6
的完整解决方案答案 0 :(得分:0)
由于该按钮位于更新面板之外,因此您需要在更新面板中添加一个触发器,该触发器具有您的按钮的controlID以及单击事件,因此在更新面板中添加以下内容:
<asp:UpdatePanel ID="UpdatePanel1" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
<ContentTemplate>
<br />
<br />
<%= System.DateTime.Now %>
<asp:Label ID="Label1" runat="server" Text="" ViewStateMode="Disabled"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnUploadFile" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
这将告诉您的更新面板将按钮视为更新面板内部并参与部分回发,就好像它位于更新面板内一样。
HTH。