1. ホーム
  2. javascript

[解決済み] javascript:_doPostBack('Gridview','Edit$0')" は、フルポストバックがまだ起こるとはどういうことでしょうか?

2022-02-17 06:05:53

質問

JavaScriptは、純粋にクライアント側で何かをしたい場合や、ポストバックが扱えない方法でサーバーに何かを送りたい場合に使用します。

しかし、Visual Studio 2008のコントロールASP.NET C#では、ページをブラウザで表示したときに、GridView、FormView、LINKBUTTON(!)というコントロールがすべて次のように表示されることがわかりました。 javascript:thing にカーソルを合わせると、そのカーソルが表示されます。なぜですか?

ポストバックがまだ発生します。リンクボタンにもJavaScriptがあり、クリックすると完全なポストバックが発生します。

変更 label.text なども、pageloadイベント上にあります!

<ブロッククオート
  • なぜJavaScriptなのか?なぜシンプルなボタンではないのでしょうか?なぜリンクボタンなのか?

解決方法は?

ASP.NETはステートレスです。つまり、ページがリクエストされるたびに、サーバーは実際にページ全体とそのコントロール& stateを構築し、リクエストに応答します。そして、リクエストに対する応答として、適切なHTMLマークアップをレンダリングします。

どのコントロールでも、autopostbackプロパティがtrueに設定されていれば、そのコントロールがポストバックを起こした場合(リンクボタンのクリックなど)、ページがサーバーにポストバックされます。

ASP.NETはどのようにページをポストバックするのですか? それは、_doPostBack()と呼ばれるjavascriptの関数を使用して行われます。この関数は次のとおりです。

function __doPostBack(eventTarget, eventArgument) {
 if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
  theForm.__EVENTTARGET.value = eventTarget;
  theForm.__EVENTARGUMENT.value = eventArgument;
  theForm.submit();
 }

この関数は、フォームをサーバーに返送するために使用されます。_doPostBackは、隠し変数__EVENTTARGETと__EVENTARGUMENTを使用して、イベントターゲットとイベント引数という引数を受け取ります。これは、どのコントロールがポストバックを引き起こしたかをサーバーに伝え、また適切な引数をサーバーに渡します。

このコードが aspx ページにある場合

<asp:LinkButton ID="lnkButton" runat="server">LinkButton</asp:LinkButton>

対応する生成されたマークアップは - となります。

<a id="LinkButton1" href="javascript:__doPostBack('lnkButton','')">LinkButton</a>

つまり、リンクボタンをクリックしたとすると、__doPostBack()関数でページがポストバックされる。そして、ページ上の各コントロールの状態に応じて、サーバーでページが再作成されます。ページ上の各コントロールの状態を取得するために、viewstateのようなメカニズムが使用されます。ページが読み込まれると、サーバーはレスポンスマークアップを計算し、レンダリングします。