使用ASP.NET AJAX时获得回发和无更新

时间:2010-07-02 19:07:04

标签: asp.net-ajax updatepanel scriptmanager

我是ASP.NET AJAX的新手,我正试图让状态文本框/按钮允许 用户无需回复即可更新状态。我有一个脚本管理器标签 将“enablepartialrendering”设置为“true”的母版页。我也有一个更新面板 内容页面上的标记。当我尝试这个时,页面回发并没有任何反应。 我究竟做错了什么?我正在使用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 个答案:

答案 0 :(得分:1)

更新面板仍会发布到服务器 - 它们只是不会将整个HTML文档返回给客户端。相反,他们会返回您<asp:UpdatePanel>中包含的部分页面并替换其内容。

只要BtnAddStatus在更新面板中,您启用了部分页面呈现,并且您没有禁用更新面板触发器,单击该按钮应该触发您的服务器端事件(它不会直接调用AddStatusUpdateAlert方法。)

有关详细信息,请参阅“Understanding Partial Page Updates with ASP.NET AJAX”。 (以前在同一个网站上有一篇很棒的文章,图表非常有用,但它已经消失了。)