これは興味深い問題です。理想的には、他のユーザーが言及したように、ページ上の1つのフォームタグのみが必要です。あなたは2つのフォームタグを持たずにJavaScriptを使ってデータを投稿することができます。
例はhereから取られ、必要に応じて変更されています。これがあなたのために働くかどうかは100%ではありませんが、私はこれがあなたがそれにアプローチしなければならない方法だと思います。
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
function postdata()
{
var fieldValue = document.getElementById("field1").value;
postwith("http://someothersite.com",{field1:fieldValue});
}
function postwith (to,p) {
var myForm = document.createElement("form");
myForm.method="post" ;
myForm.action = to ;
for (var k in p) {
var myInput = document.createElement("input") ;
myInput.setAttribute("name", k) ;
myInput.setAttribute("value", p[k]);
myForm.appendChild(myInput) ;
}
document.body.appendChild(myForm) ;
myForm.submit() ;
document.body.removeChild(myForm) ;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<input type="text" id="field1" name="field1" />
<asp:Button ID="btnSubmitSubscribe" runat="server" Text="Submit" OnClientClick="postdata(); return false;" />
</div>
</div>
</form>
</body>
</html>
ジャバスクリプトが実行可能な選択肢ではない場合 - あなたは、コードの後ろにポストコールを作成するために、ネットのHttpWebRequestのオブジェクトを使用することができます。あなたのテキストフィールドには、ASPのテキストボックスであると仮定すると(後ろのコードに次のようになります。
private void OnSubscribeClick(object sender, System.EventArgs e)
{
string field1 = Field1.Text;
ASCIIEncoding encoding=new ASCIIEncoding();
string postData="field1="+field1 ;
byte[] data = encoding.GetBytes(postData);
// Prepare web request...
HttpWebRequest myRequest =
(HttpWebRequest)WebRequest.Create("http://someotherwebsite/");
myRequest.Method = "POST";
myRequest.ContentType="application/x-www-form-urlencoded";
myRequest.ContentLength = data.Length;
Stream newStream=myRequest.GetRequestStream();
// Send the data.
newStream.Write(data,0,data.Length);
newStream.Close();
}
ユーザーがJavaScriptを有効にしている場合、JavaScriptのソリューションは素晴らしいです... – goldenratio
これは狡猾です... –
はjavascript-lessメソッドも追加されました – brendan