[asp.net] проблема с обновлением панели обновления из кода сервера - PullRequest
0 голосов
/ 20 апреля 2011

В моем приложении есть простая загрузка с 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

1 Ответ

0 голосов
/ 20 апреля 2011

Поскольку кнопка находится за пределами панели обновлений, вам необходимо добавить на панель обновлений триггер, который имеет 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...