1

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

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

ポストバックは引き続き発生します。リンクボタンにもこの JavaScript があり、クリックするたびに完全なポストバックが発生します。

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

  • では、なぜ JavaScript を使用するのでしょうか。シンプルなボタンではないのはなぜですか?なぜリンクボタン?
4

2 に答える 2

1

この場合、JavaScript 呼び出しを使用して追加データをサーバーに送信できます。たとえば、グリッドのクライアント データを保存できます (サイズ変更された列の幅など)。サーバー側のフレームワークは、このアプローチを使用して、サーバー側の担当者がすべてのクライアント側コードを生成できるようにします。これは一種の簡単なソリューションです (よく整理された目立たない JavaScript と比較して)。

于 2010-07-17T16:41:11.600 に答える
0

ASP.NET はステートレスです。つまり、ページがリクエストされるたびに、サーバーは実際にページ全体とそのコントロールと状態を構築し、リクエストに応答します。次に、要求への応答として適切な 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 などのメカニズムが使用されます。ページが読み込まれると、サーバーは応答マークアップを計算してレンダリングします。

于 2010-07-17T17:06:56.670 に答える