Получение постбека и без обновления при использовании ASP.NET AJAX - PullRequest
0 голосов
/ 02 июля 2010

Я новичок в ASP.NET AJAX и пытаюсь получить текстовое поле / кнопку статуса, чтобы пользователи могли обновлять статус без обратной отправки.У меня есть тег диспетчера сценариев на главной странице с «enablepartialrendering», установленным в «true».У меня также есть тег updatepanel на странице содержимого.Когда я попробую это, страница откатается, и ничего не происходит.Что я делаю неправильно?Я использую ASP.NET 3.5 / C #.Спасибо.

На главной странице есть следующий тег сценария чуть ниже тега формы:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
    </asp:ScriptManager>

И где-то на странице существует ContentPlaceHolder:

<asp:ContentPlaceHolder ID="ContentCenter" runat="server">
                </asp:ContentPlaceHolder>

Тег содержимого ContentPlaceHolder выглядит следующим образом:

<asp:Content ContentPlaceHolderID="ContentCenter" runat="server">
    <div class="divContainer">
        <div class="divContainerBox">
            <div class="divContainerTitle">
                Network Activity</div>
            <div class="divContainerRow">
                <asp:Panel ID="pnlStatusUpdate" runat="server">
                    <asp:TextBox Width="400" Height="50" Style="font-size: 9px; padding-left: 0px; padding-right: 0px;"
                        ID="txtStatusUpdate" runat="server"></asp:TextBox>
                    <br />
                    <asp:Button Style="font-size: 9px; padding-left: 0px; padding-right: 0px;" ID="BtnAddStatus"
                        runat="server" Text="Add" /><br />
                    <asp:Repeater ID="repFilter" runat="server">
                        <ItemTemplate>
                            <asp:Label ID="lblMessage" runat="server" Text='<%# ((Alert)Container.DataItem).Message  %>'></asp:Label>
                        </ItemTemplate>
                        <SeparatorTemplate>
                            <hr />
                        </SeparatorTemplate>
                    </asp:Repeater>
                    <asp:Label ID="lblMessage" runat="server"></asp:Label>
                </asp:Panel>
            </div>
        </div>
    </div>
</asp:Content>

И вот метод сервера.Он ничего не возвращает - он отправляет данные в «SaveStatusUpdate» в базу данных.В следующий раз, когда страница откроется, появится новое обновление.Мне не нужен постбэк, и чтобы введенный текст, который был введен (плюс любой текст, который мог ввести друг), появлялся при нажатии кнопки обновления статуса.

protected void BtnAddStatusClick(object sender, EventArgs e)
        {
            var su = new StatusUpdate
             {
                 CreateDate = DateTime.Now,
                 AccountId = _userSession.CurrentUser.AccountId,
                 Status = txtStatusUpdate.Text
             };

            _statusRepository.SaveStatusUpdate(su);
            _alertService.AddStatusUpdateAlert(su);

        }

Я предполагаю, что кто-то может спросить, как выглядит метод AddStautsUpdateALert, так что вот оно._AlertMessage - это обновление статуса.Как мне заставить его появляться, используя AJAX?

public void AddStatusUpdateAlert(StatusUpdate statusUpdate)
        {
            _alert = new Alert
                        {
                            CreateDate = DateTime.Now,
                            AccountId = _userSession.CurrentUser.AccountId,
                            AlertTypeId = (int) AlertType.AlertTypes.StatusUpdate
                        };
            _alertMessage = "<div class=\"AlertHeader\">" + GetProfileImage(_userSession.CurrentUser.AccountId) +
                           GetProfileUrl(_userSession.CurrentUser.UserName) + " " + statusUpdate.Status + "</div>";
            _alert.Message = _alertMessage;
            SaveAlert(_alert);
            SendAlertToFriends(_alert);

        }

1 Ответ

1 голос
/ 03 июля 2010

Панели обновления по-прежнему отправляются на сервер - они просто не возвращают весь HTML-документ клиенту.Вместо этого они возвращают часть страницы, содержащуюся в вашем <asp:UpdatePanel>, и заменяют ее содержимое.

Пока BtnAddStatus находится внутри панели обновлений, у вас включен частичный рендеринг страниц, и вы не отключилитриггеры панелей обновления запускаются, нажатие кнопки должно инициировать ваше событие на стороне сервера (оно напрямую не вызывает метод AddStatusUpdateAlert).

Подробнее см. " Общие сведения об обновлении частичных страниц с помощью ASP.NETAJAX .»(Раньше на том же сайте была отличная статья с чрезвычайно полезными диаграммами, но она исчезла.)

...