В моем приложении есть простая загрузка с 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 можно вызвать только на UpdatePanel с идентификатором «UpdatePanel1» перед рендерингом.
Я не могу узнать, что происходит. Панель обновлений, обновленная от javascript, работает нормально, но мне любопытно, почему на сервере возникает проблема.
Полное решение я положил здесь https://dl -web.dropbox.com / get / Public / WebApplication1.rar? W = ea9959b6