ASP.NETでは構造上、formタグは1つのページで1つだけ使うよう推奨されています。
そのときaction属性は空で、送信形式は"POST"になっています。
ところがCGIなどを使う場合にはaction属性を指定し、場合によっては"GET"の送信形式を使いたい場合があります。そういった場合はHTML文書(エディタなし)モジュールなどを使って以下のようにスクリプトを記載し、ボタンのonclick属性などから呼び出してください。
◆ポイント
(1)
CGI呼び出しには不要で長くなりがちな隠しフィールド__VIEWSTATEをクリアしています。また場合によっては__EVENTTARGETや__EVENTARGUMENTといった隠しフィールドもありますが、これはASP.NETで使っているものですので無視してください。
theform.__VIEWSTATE.value = "";
(2)
呼び出すCGIに適した 送信形式methodとエンコード形式enctypeを指定します。
theform.method = "GET";
theform.encoding = "application/x-www-form-urlencoded";
※Macのブラウザ:サファリではエンコード形式を"application/x-www-form-urlencoded"と明示的に指定が必要な場合があります。
(3)
キー入力直後にエンターキーを押してCGIを呼び出したい場合、最後の入力欄など該当するinput文に追記します。
onKeypress="javascript:if(event.keyCode == 13) {doSearch(); return false;}"
(4)(google検索)
呼び出し元に関わらず、gooogle(google miniを含む)の検索を利用する場合、googleの呼び出し先(ターゲット・window)を"nw"とします。
theform.target = "nw";
<script language="javascript" type="text/javascript">
<!--
function doSearch() {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = "document.Form1;"
}
else {
theform = "document.forms[""Form1"];
}
theform.__VIEWSTATE.value = "";
theform.method = "GET";
theform.encoding = "application/x-www-form-urlencoded";
theform.action = "http://動かしたいCGIなど.cgi";
theform.submit();
}
// -->
</script>
<input type="text" name="query" size="25" onKeypress="javascript:if(event.keyCode == 13) {doSearch(); return false;}">
<input type="hidden" name="max" value="20">
<input type="hidden" name="result" value="normal">
<input name="buttom" type="image" src="/menu_img/search_bt.gif" align="middle" width="40" height="18" border="0" onClick="doSearch()">
【静的出力利用する時の注意点】
静的出力されたHTMLには VIEWSTATEが出力されません。
※静的出力運用では以下のようにお願いします。
■記述内容
「theform.__VIEWSTATE.value = "";」をコメントアウトします。
------------------------------------------------------------------
<script language="javascript" type="text/javascript">
<!--
function doSearch() {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = "document.Form1;"
}
else {
theform = "document.forms[""Form1"];
}
/*
theform.__VIEWSTATE.value = "";
*/
theform.method = "GET";
theform.encoding = "application/x-www-form-urlencoded";
theform.action = "http://動かしたいCGIなど.cgi";
theform.submit();
}
// -->
</script>
------------------------------------------------------------------