■
当たり前の動作なんだが、これは再確認のためのMEMO。
Test.ASPXを作成して、
クライアントスクリプトHoge()が実行される必要があるとする。
<ASP:Button ID="button1" runat="server" onClientClick="JavaScript:Hoge();" />
このTest.ASPXにて表示されるHTMLは、
・UseSubmitBehavior=Trueの時 <input type="submit" id="button1" onclick="JavaScript:Hoge()"> ・UseSubmitBehavior=falseの時 <script type="text/javascript"> <!-- var theForm = document.forms['form1']; if (!theForm) { theForm = document.form1; } function __doPostBack(eventTarget, eventArgument) { if (!theForm.onsubmit || (theForm.onsubmit() != false)) { theForm.__EVENTTARGET.value = eventTarget; theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit(); } } <input type="button" id="button1" onclick="JavaScript:Hoge();__doPostBack('button1,'')">
こうなる。
さて、Function Hoge()で、別ウィンドウ(target = _blank)にPOSTしようなんて処理を記述したい場合は、注意せよ。
Hoge()でSubmitされる処理と、Submitボタンでの処理があるため、結果二つのウィンドウが起動してしまう。
いや、実は、やりたいことの実現をサーバコントロールを利用している時点で、ほぼ間違い。
自前で別ウィンドウにPOSTするなら、サーバコントロールを利用せず、<input type="button">か
<Button>を利用すること。
で、クライアントスクリプト側でPOSTしよう。
もしくは、Window.Openで空ウィンドウを開いてから、そこにPOSTしましょう。これならサーバコントロールでもOKです。