2

データソースとデータバインディングを使用しているGridviewを使用しています。ページをリロードすると、グリッドビューが更新されますが、ボタンをクリックしたいのですが、うまくいきません。

updatepanel 内のグリッドビュー:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
        <ContentTemplate>
            <asp:GridView ID="gvWallPosts" runat="server" AutoGenerateColumns = "false" 
             CaptionAlign="NotSet" CellPadding="5">
            <Columns>
                <asp:TemplateField HeaderText="Avsändare">
                    <ItemTemplate>
                        <%# GetSender((int)Eval("WallSender"))%>
                        <br />
                    </ItemTemplate>
                </asp:TemplateField>
                <asp:TemplateField HeaderText="Inlägg">
                    <ItemTemplate>
                        <%# Eval("Post")%>
                        <br />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
            </asp:GridView>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:TextBox ID="txtWall" runat="server" Height="105px" TextMode="MultiLine" Width="227px"></asp:TextBox>
    <br />
    <asp:Button ID="btnWall" runat="server" Text="Posta" onclick="btnWall_Click" />

分離コード:

protected void btnWall_Click(object sender, EventArgs e)
    {
        con.SendWallPost(con.GetId(Membership.GetUser().UserName), Convert.ToInt32(Request.QueryString["ID"]), txtWall.Text); //This method is sending the post
        upWall.Update();
    }

したがって、ButtonClick で updatepanel を更新したいのですが、ページ全体をリロードして結果を確認したくありません。

4

3 に答える 3

9

ボタンが見えないのでbtnWall、 の外にあると思いますUpdatePanel。ただし、外部のコントロールUpdatePanelがポストバックをトリガーできるようにする場合は、明示的なトリガーを定義する必要があります。

したがって、次を使用できますAsyncPostBackTrigger

<asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
     <ContentTemplate>
         ....
     </ContentTemplate>
     <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnWall" EventName="Click" />
     </Triggers>
 </asp:UpdatePanel>
于 2013-01-10T12:41:26.053 に答える
1

デフォルトでは、ScriptManager コントロールの EnablePartialRendering プロパティのデフォルト値が true であるため、部分ページ更新は更新パネルで有効になっています。ボタンは非同期として機能するため、更新パネルにボタンを配置するだけで十分です。パネル内のポストバック コントロール。更新後にこの行 ( gvWallospts.Databind()) を追加するだけです。どうなるか教えてください。

protected void btnWall_Click(object sender, EventArgs e)
{
    con.SendWallPost(con.GetId(Membership.GetUser().UserName), Convert.ToInt32(Request.QueryString["ID"]), txtWall.Text); //This method is sending the post
    //upWall.Update();
    gvWallPosts.DataBind();
}

このようにマークアップを設定してみてください

  <asp:ScriptManager ID="ScriptManager1" runat="server">
   </asp:ScriptManager>
      <asp:UpdatePanel ID="upWall" runat="server" ChildrenAsTriggers="true" UpdateMode="conditional">
    <ContentTemplate>
        <asp:GridView ID="gvWallPosts" runat="server" AutoGenerateColumns = "false" 
         CaptionAlign="NotSet" CellPadding="5">
        <Columns>
    <asp:Templatefield>
   <asp:Button ID="btnWall" runat="server" Text="Posta" command="Edit" />
     </asp:TemplateField>
            <asp:TemplateField HeaderText="Avsändare">
                <ItemTemplate>
                    <%# GetSender((int)Eval("WallSender"))%>
                    <br />
                </ItemTemplate>

                <EditItemTemplate>

                      <asp:TextBox Text='<%# Bind("WallSender")%>' />
                </EditItemTemplate>

            </asp:TemplateField>
            <asp:TemplateField HeaderText="Inlägg">
                <ItemTemplate>
                    <%# Eval("Post")%>
                    <br />
                </ItemTemplate>
                   <EditItemTemplate>

                     <asp:TextBox  Text='<%# Bind("Post")%>'/>
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
        </asp:GridView>
    </ContentTemplate>
</asp:UpdatePanel>

グリッド行更新イベントで

  protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{


    con.SendWallPost(con.GetId(Membership.GetUser().UserName),    Convert.ToInt32(Request.QueryString["ID"]), txtWall.Text); 
     gvWallPosts.DataBind();


}

また、ページ読み込み時の Binding コードがこれに挟まれていることを確認してください

 If(!IsPostBack)
     {
                   }
于 2013-01-10T13:18:02.650 に答える
0

ボタンを更新パネル内に配置するか、Tim Schmelterによって提案されたように、ボタンクリックイベントで更新パネルを更新する明示的なトリガーを定義する必要があります。

于 2013-01-10T12:54:01.350 に答える