ASP.NETでJavascriptでPostするときの注意点
JavascriptでPostするときは基本的には、form.submit()をするだけでOK。
ただし、ASP.NETの場合、
asp:Button runat="server" ID="buttonexec" Text="実行" onClick="buttonexec_Click" onClientClick="execute()"
等でonClickをonClientClick中のjavascriptで呼び出してサーバー側の処理を行いたい場合は、単純には処理できない。
原因はPOSTの本文中に
Content-Disposition: form-data; name="buttonexec"
の押したボタンの情報が送信されず、サーバー側にそのままスルーされてしまうため。
原因が分かれば後は足してあげればよいだけなので、
var ele = document.createElement('input');
ele.setAttribute('type', 'hidden');
ele.setAttribute('name', button);
ele.setAttribute('value', button);
form.appendChild(ele);
とhidden項目を動的に追加して上げればよい。めでたし。
-
-
- -
-
(追記)
単純にエレメントを付け足していくと
POSTする毎に付け足されてとんでもないことになった(汗)ので
if (document.getElementById(button)) {
document.getElementById(button).attributes.getNamedItem('value').value = button;
} else {
var ele = document.createElement('input');
ele.setAttribute('type', 'hidden');
ele.setAttribute('name', button);
ele.setAttribute('id', button);
ele.setAttribute('value', button);
form.appendChild(ele);
}
などとしてあげるほうが親切でした。
-
-
- -
-
(更に追記)
if (document.getElementById(button)) {
document.getElementById(button).attributes.getNamedItem('value').value = button;
}
などせずに、submit()後に
ele.removeNode(true);
して上げれば良かった。
今度まとめよう。