Asp.Netにおけるサービス側コントロールイベントはどのようにトリガーされますか?

7235 ワード

初学ASP.NETの頃は、様々なコントロールの強力な機能に圧倒されたことがあります.もちろん、めまいも起こりやすく、コントロールの名前だけを覚えるのは簡単なことではありません.まして属性、イベント、機能、構成手順がたくさんあります.ははは.その後、これらのものは確かに価値がないと感じ、企業レベルの開発ではあまり使われませんでした.
本文を書く目的は、webformのサービス側コントロールを「けなす」ことや、意図的に「排斥する」ことではなく、ここではその優劣についてあまり議論しません.
しかし、初心者にヒントを与えることがあります:実は多くのコントロールの使い方が悪くて、1つをマスターしてから、他のものを使うのは比較的簡単です.例えばGridViewを使ってからListViewを使うのは決して難しいことではありません.「コントロールの表面に浮かぶ」ことは絶対にしないでください.何かの考え方を形成すると、後で向上しにくいからです.もちろん、Webの本質とこれらのコントロールの内部メカニズムをゆっくり理解して、振り返ってそれらを見ると、本当に簡単だと思います.これはまた「刀を研ぐか薪を切るか」の問題だ.
 
サーバコントロールをaspxページ(Buttonボタンなど)にドラッグしてダブルクリックすると、バックグラウンドコードにclickイベントが登録されています.または、コントロールの右クリック--「プロパティ」をクリックし、「稲妻アイコン」--イベントを見つけて、対応するイベントを登録することもできます.これが伝説のwebformの「イベント駆動メカニズム」です.VBやwindowsの開発に触れたことがあるなら、暖かくなるかもしれません.
では、これらの事件は、いったいどのように触発されたのだろうか.シミュレーションしてもいいですか?なぜ私は時々Buttonボタンをクリックしてもバックグラウンドイベントをトリガーしないのですか?
Asp.Netでクライアントがサービス側イベントをトリガーする場合は、次の2つに分けられます.
一.WebControlsのButtonとHtmlControlsのTypeがsubmitのHtmlInputButton
この2つのボタンは、最終的にクライアントに表示されます.
< input name="Submit1" id="Submit1" type="submit" value=”Submit”>

これはFormフォームのコミットボタンで、クリックするとパラメータとしてサービス側に送信されます.パラメータは、コントロールのname属性=コントロールのvalue値で、上記の例に対応しています.Submit 1=Submitです.サービス側は、受信したコントロールのname属性のこのkeyに基づいて、このボタンがクリックされたことを知り、サービス側でこのボタンのクリックイベントをトリガーする.
二.HtmlControlsのTypeがbuttonのHtmlInputButtonおよびLinkButtonクリック、TextBoxのChangeイベントなど、他のすべてのコントロールイベント:
これらのイベントは、クライアントが生成されると、統一されたメカニズムを経てサービス側に送信されます.
1.まずasp.Netページフレームワークでは、2つのHiddenドメインを使用して、どのコントロールがトリガーしたかを示すイベントと、イベントのパラメータを格納します.
< !--          ,        name -->

< input type="hidden" name="__EVENTTARGET" value="" />
< !--          ,                 ,          -->

< input type="hidden" name="__EVENTARGUMENT" value="" />

2.サービス側はjavascriptのメソッドを生成して、これらのすべてのイベントの送信を処理します.このコードは次のとおりです.
< script type="javascript">
  < !--

  
function __doPostBack(eventTarget, eventArgument) {

  var theform
= document.WebForm2;

  
theform.__EVENTTARGET.value = eventTarget;

  
theform.__EVENTARGUMENT.value = eventArgument;

  
theform.submit();

  }

  // --
>

  < /script>

3.サービス側イベントを開始する各コントロールは、応答するクライアントイベントで上記のコードを呼び出す
(ブラウザはhtml、js、css、ピクチャなどの静的コンテンツのみを認識し、aspx、php、jspページが最終的にhtmlになり、ユーザーに表示されます)
例えば、HtmlControlsのTypeがbuttonのHtmlInputButtonのクリックイベント
< !--          __doPostBack,eventTarget    'Button2',   name 'Button2’       ,eventArgument   ,    Type button HtmlInputButton               -->
< input language="javascript" onclick="__doPostBack('Button2','')" name="Button2" id="Button2" type="button" value="Button" />

 
例えば、TextBoxコントロールのChangeイベント
< !--    onchange    __doPostBack,eventTarget    ’TextBox1’,   name ’TextBox1’       , TextBox                 TextChanged,           TextBox TextChanged  -->
< input name="TextBox1" type="text" id="TextBox1" onchange="__doPostBack('TextBox1','')" language="javascript" />

4.クライアントがイベントをトリガーした後に呼び出す_doPostBackメソッドは、トリガーされたコントロールソースを表すeventTargetとイベントパラメータeventArgumentをそれぞれ2つの非表示ドメイン__に付与するEVENTTARGETと_EVENTARGUMENT、それからFormを提出して、サービス側で__に基づいてEVENTTARGETと_EVENTARGUMENTは、どのコントロールのどのイベントがトリガーされたかを判断します.
 
5.分かった以上_doPostBackという「有名な」関数は、もちろん「チェーンを盗む」こともできます.フォーラムでは、通常のhtmlコントロール(ラベル)とjsでバックグラウンドを呼び出す方法/バックグラウンドイベントを刺激する方法をよく聞かれます.ほほほ.「鎖を盗む」を使って間もなくいいですか?もちろん、実現方法はたくさんありますが、ここではこれ以上説明しません.
 
こんなにたくさん話して、読者はすでにaspを理解したと信じています.Netではいわゆる「イベントメカニズム」になりました.やはりその言葉、web開発は、「リクエスト/処理/応答」にほかならない.