簡単な答え: JavaScript 関数は、特定のコントロールとそれが処理するイベントに__doPostBack
基づいて呼び出されます。<asp />
詳細な回答:場合によります。
まず、あなたの例をカバーしましょう。<asp:Button />
標準としてレンダリングされる があります<input type="submit" />
。ASP.NET WebFormsのすべては、標準のHTML<form>
タグを中心に展開します。HTMLは、JavaScript を使用したり支援したりせず<form>
に、ボタンをクリックして送信されます。<input type="submit" />
<input type="submit" />
これを念頭に置くと、レンダリングされたボタンにイベントが割り当てられていないことがよくわかります (既にお気づきでしょう) 。onclick
ご覧のとおり、ボタンがクリックされるとフォームが送信されます。
ボタンがクリックされたときにバックエンド (C#/VB.NET/etc.) コードがどのように実行される<input type="submit" />
かについては、すべて ASP.NET Framework 自体によって処理され、この質問/回答の範囲を超えています。
__doPostBack
第二に、何が何で、どのように使われるかをカバーしましょう。 __doPostBack
HTML を送信するために使用される単なるヘルパー JavaScript 関数<form>
です。上記の理由により、<input type="submit" />
ボタンが関数を呼び出す必要がない理由がわかりました。__doPostBack
<asp:DropDownList />
簡単にするために、コントロールがあり、SelectedIndexChanged
イベント ハンドラーが割り当てられている ASP.NET ページを見てみましょう。
<asp:DropDownList ID="MyDropDownList" AutoPostBack="true" OnSelectedIndexChanged="MyDropDownList_SelectedIndexChanged" runat="server" />
は<asp:DropDownList />
次のようにレンダリングされます。
<select id="ctl00_MyDropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MyDropDownList\',\'\')', 0)" name="ctl00$MyDropDownList"></select>
setTimeout
イベント内の関数を無視しましょう。onchange
これは、ASP.NET で使用されるハックな回避策にすぎません。イベント内の関数に注目しましょう__doPostBack
。
ここでわかるように、__doPostBack
関数はonchange
イベント ハンドラーによって呼び出されています。<asp:DropDownList />
主な違いは、または<select />
コントロールの値を変更しても、ブラウザはフォームを送信しないことです!
ここでも、ASP.NET Framework は、フォームが送信されたときにバックエンド コードがどのように実行されるかを内部的に処理します (__doPostBack
関数を使用するかどうかに関係なく)。
最後に、 の詳細については、 と の__doPostBack
eventTarget
2 つのパラメーターを受け入れますeventArgument
。ポストバックを引き起こしているコントロールeventTarget
のレンダリングされた HTML プロパティを含みます。id
andeventArgument
は、追加データをバックエンド コードに渡すために使用できるオプションのパラメーターです。
追加情報の編集: OP は非常に興味深い質問をしました - 複数の送信ボタンがあるとどうなりますか?
操作中POST
、ブラウザーには、操作を開始する原因となったvalue
の が含まれます。<input type="submit" />
つまり、<input />
要素の値を取得するのと同じように、送信の原因となったボタンを照会することもできます!