0

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);

        }
4

1 に答える 1

1

更新パネルは引き続きサーバーに送信されます。HTML ドキュメント全体がクライアントに返されるわけではありません。代わりに、あなたのページに含まれている部分を返し、<asp:UpdatePanel>その内容を置き換えます。

BtnAddStatus更新パネル内にある限り、部分ページ レンダリングが有効になっており、更新パネルのトリガーを無効にしていない場合、ボタンをクリックするとサーバー側のイベントがトリガーされます (AddStatusUpdateAlertメソッドは直接呼び出されません)。

詳細については、「ASP.NET AJAX による部分的なページ更新について」を参照してください。(以前は同じサイトに非常に役立つ図を含む素晴らしい記事がありましたが、消えてしまいました。)

于 2010-07-02T20:21:07.540 に答える