web-dev-qa-db-ja.com

UpdatePanelのListViewのLinkBut​​tonにより、完全なポストバックが発生します

UpdatePanelのListViewにLinkBut​​tonがあります。ボタン(まあ、それらのいずれか)で部分的なポストバックが発生するようにしたいのですが、ページ全体のポストバックが発生しています。

<asp:UpdatePanel ID="upOutcomes" UpdateMode="Conditional" runat="server">
  <ContentTemplate>
      <asp:ListView ID="lvTargets" runat="server" onitemdatabound="lvTargets_ItemDataBound">
        <ItemTemplate>
          <asp:LinkButton ID="lnkAddTarget" CssClass="lo" Text='<%# Eval("Title") + " <b>" + Eval("Level") + Eval("SubLevel") + "</b>" %>' runat="server"></asp:LinkButton>
        </ItemTemplate>
      </asp:ListView>
  </ContentTemplate>
</asp:UpdatePanel>

私はこれを追加することを提案したstackoverflowに関する別の投稿を見つけました:

protected void lvTargets_ItemDataBound(object sender, ListViewItemEventArgs e) {
  var lb = e.Item.FindControl("lnkAddTarget") as LinkButton;
  tsm.RegisterAsyncPostBackControl(lb);  // ToolkitScriptManager
}

違いはありません...

他にも同様の投稿がいくつかありますが、解決策が見つかりません!何か案は?

28
James

ASP.NET 4のClientIDMode設定を使用すると、ASP.NETがHTML要素のid属性を生成する方法を指定できます。

以前のバージョンのASP.NET(つまり、4より前)では、デフォルトの動作はClientIDModeのAutoID設定と同等でした。ただし、デフォルト設定はPredictableになりました。

マイクロソフトの記事を読む

スクリプトマネージャーが以前のバージョンの.NETでHTMLコントロールが生成されることを期待する方法のため、これにはAutoIdが必要です。

38
Steve Parker

該当するページのページディレクティブにClientIDMode="AutoID"を設定することで、この問題を解決しました。

<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>

これは正常に機能しています。

1
Prithivirajan

次のように、該当するページのページディレクティブにClientIDMode = "AutoID"を設定することで、この問題を解決しました。<%@ Page Title = "" ClientIDMode = "AutoID" Language = "C#"%>

0
Salman Taj

この問題を解決するには、該当するページのページディレクティブでClientIDMode = "AutoID"を次のように設定します:_<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>_。これにより、以前の問題であるASPリンクボタンが完全なポストバックを引き起こすListView。

ただし、これには、クライアントコード(Jquery、Javascript)のASPコントロールが、ブラウザーのソースコードに表示されるフルネームで参照される必要がある場合があります(FirefoxでFirebugを使用して取得します)たとえば、このJquery関数$("#ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; });は次のように変更されました(セレクターのaspボタン名の変更に注意してください):$("#ctl00_ContentPlaceHolder1_btnCancelReferCustomer").click(function () { $("#divRefer").hide({ effect: "slide", duration: 200 }); return false; });

0
Kerwin Londono

次のように、CommandNameCommandArgument属性およびOnCommandイベントハンドラーをリンクボタンに追加してみてください。

<asp:LinkButton CommandName='test' CommandArgument='<%# Eval("Title") %>' ID="lnkAddTarget" runat="server" OnCommand="LinkButtonCommandEventHandler" />

または-ListView全体にOnItemCommandハンドラーを追加します。

0
Alex