Scott Hanselman のブログでこれらの Asp.Netインタビューの質問を読んでいて、この質問に出くわしました。彼が話していることを理解できる人はいますか。
4 に答える
<asp:LinkButton ID="lbEdit" CssClass="button"
OnClientClick="javascript:alert('do something')"
onclick="OnEdit" runat="server">Edit</asp:LinkButton>
このOnClientClick
属性は、PostBack 機能を失わずに JavaScript を追加できることを意味します。これが私のインタビューでの回答です。
PostBacksの仕組みを説明する
ポストバックは、ステートレスプロトコルよりもステートフルな動作をエミュレートするWebプロトコルを抽象化したものです。
、クライアント側の両方で
クライアント側では、ポストバックは、ページ上のすべてのコントロールの状態を格納するjavascript呼び出しと非表示フィールドによって実現されます。
およびサーバー側。
サーバー側はイベントのライフサイクルを通過します。そのライフサイクルの一部は、ページ上のすべてのコントロールの状態を維持するためのビューステートのハイドレーションと、__doPostBack呼び出しに渡されたパラメーターに基づくイベントの発生です。クライアント側
PostBack機能を失うことなく、自分のJavaScriptをクライアント側にチェーンするにはどうすればよいですか?
何が必要かによります。99%の時間で機能する最も簡単な方法は、asp:hiddenfieldを使用してクライアント側とサーバー側の間で通信することです。エッジケースの場合、Exendersに入り、MSajaxAPIを介してjavascriptでviewstate/controlstate/clientstateを操作する必要があります。これは、膨大な学習曲線と多くの落とし穴でかなり苦痛です。通常、非表示のフィールドを使用し、手動で__doPostBackを呼び出すだけで十分です。
それが私がその箇条書きに答える方法です。__doPostBackの詳細については、クイックグーグルでたくさんの結果が得られます(怠惰な場合、これは最初のヒットhttp://aspalliance.com/895です)
次のような意味ですか。
コードビハインドで:
protected string GetPostBack()
{
return ClientScript.GetPostBackEventReference(this, null);
}
そしてあなたのaspxで:
<a href="javascript:<%=GetPostBack() %>">Click here to postback</a>
彼がここで尋ねているのは、JavaScript 関数を結び付けて、ASP.NET ポストバック機能と連携して動作させる方法だと思います。
つまり、独自の JavaScript を使用してコントロールのイベントをトリガーするにはどうすればよいですか?
ASP.NET クラス ライブラリには、ASP.NET ページに JavaScript をプログラムで追加できるクラス (クラスClientScript
内にある) が含まれています。System.Web.UI.Page
これには、 Web コントロールに関連付けられたイベントをトリガーするために ASP.NET が使用するスクリプトGetPostBackEventReference
を生成するメソッドが含まれています。__doPostBack
それが理にかなっていることを願っています