以前に ASP プログラムを作成したとき、タイプが送信に設定されたボタンのみがフォームをトリガーしてサーバーにデータを送信できることを知っていました。
例: Asp.Net のボタンは <input type="submit"> と同じです。
しかし、Asp.Net の多くのコントロールは、LinkButton など、サーバー側と自由に対話できるようになりました。
これはどのようにして達成されるのでしょうか?
まったく新しい方法ですか?
実際、これは Microsoft による単なる回避策です。
まずはクライアントのコードを見てみましょう。
こちらはLinkButtonのあるページです。
実際、クライアント側の LinkButton は HTML の A に相当します。
LinkButton がサーバーと対話できる理由を見てみましょう。
右クリックしてページのソース コードを表示すると、次のように表示されます。
<script type="text/javascript">
<!--
var theForm = document.forms['ctl00'];
if (!theForm) {
theForm = document.ctl00;
}
function __doPostBack(eventTarget,eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = イベントターゲット;
theForm.__EVENTARGUMENT.value = イベント引数;
theForm.submit();
}
}
// -->
</script>
<a id="simpleLinkButton1" href="javascript:__doPostBack('simpleLinkButton1','')">クリックしてください</a>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
上記のコードから、simpleLinkButton1 がリンクであり、フォームがクライアント コードを通じて送信されることがわかります。
隠しフィールドのうち 2 つは、__doPostBack の 2 つのパラメーター値をこれら 2 つの隠しフィールドに割り当てることでデータを交換するために使用されます。
これが、LinkButton にもデータを送信する機能がある最も直感的な理由です。
では、上記のコードはどのようにして生成されたのでしょうか?
LinkButton のソース コードを見ると、次のことがはっきりわかります。
保護された内部オーバーライド void OnPreRender(EventArgs e)
{
Base.OnPreRender(e);
if ((this.Page != null) && this.Enabled)
{
this.Page.RegisterPostBackScript();
if ((this.CausesValidation && (this.Page.GetValidators(this.ValidationGroup).Count > 0)) || !string.IsNullOrEmpty(this.PostBackUrl))
{
this.Page.RegisterWebFormsScript();
}
}
}
上記は、私自身が勉強や仕事の過程で経験したことを忘れないように記録したものです。
皆さんともっとコミュニケーションをとれればと思います!
http://www.cnblogs.com/maplye/archive/2006/08/29/489338.html