我有一个标准的aspx页面,我需要添加另一个标准的
HTML表单并将其提交到另一个位置(外部站点),但是每当我按提交按钮,页面似乎做了一个帖子而不是使用子页面,形成动作网址.
模仿下面的形式关系.注意在实际部署中,表单将是主页面布局的内容区域的一部分,因此窗体需要从主页面单独提交.
<html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <form id="subscribe_form" method="post" action="https://someothersite.com" name="em_subscribe_form" > <input type="text" id="field1" name="field1" /> <input id="submitsubform" type="submit" value="Submit" /> </form> </div> </form> </body> </html>
解决方法
这是一个有趣的问题.理想情况下,您只需要其他用户提到的页面上的1个表单标签.可能你可以通过javascript发布数据,而不需要2个表单标签.
示例取自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>
如果javascript不是一个可行的选择 – 您可以使用.Net的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,data.Length); newStream.Close(); }