GAMMD rev.3

気ままにメモ

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);
して上げれば良かった。

今度まとめよう。