[解決済み] javascript:_doPostBack('Gridview','Edit$0')" は、フルポストバックがまだ起こるとはどういうことでしょうか?
質問
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のようなメカニズムが使用されます。ページが読み込まれると、サーバーはレスポンスマークアップを計算し、レンダリングします。
関連
-
[解決済み] [Solved] Uncaught TypeError: nullのプロパティ 'appendChild' を読み取ることができない。
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】中央値の計算 - javascript
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] javascript:void(0)」とは何ですか?
-
[解決済み] jQuery.fnとは何ですか?
-
[解決済み] Visual Studioの「Any CPU」ターゲットはどういう意味ですか?
-
[解決済み] JavaScriptで「var that = this;」とはどういう意味ですか?
-
[解決済み】(function($) {})(jQuery);ってどういう意味?
-
[解決済み】JavaScriptの「= +_」の意味とは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み】ある要素が可視DOMに存在するかどうかを確認するにはどうすればいいですか?
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】エラー:リスン EACCES 0.0.0.0:80 OSx Node.js
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools