在 ASP.NET 中使用嵌入式标准 HTML 表单

Posted

技术标签:

【中文标题】在 ASP.NET 中使用嵌入式标准 HTML 表单【英文标题】:Using embedded standard HTML forms with ASP.NET 【发布时间】:2010-10-09 23:50:11 【问题描述】:

我有一个标准的 aspx 页面,我需要在其中添加另一个标准 html 表单并将其提交到另一个位置(外部站点),但是每当我按下提交按钮时,页面似乎会回发而不是使用子表单操作 url。

以下形式关系的模型。请注意,在实际部署中,表单将成为母版页布局的内容区域的一部分,因此表单需要独立于母版页表单提交。

    <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】:

对于这个问题有一个非常好的棘手的解决方案。

您可以在&lt;form&gt; 之前插入&lt;/form&gt; 标记以关闭导致问题的asp.net 表单。不要忘记在您的 html 表单后添加 &lt;form&gt; 标签。它可能会导致编辑器给你一个异常,但不用担心,它会起作用的。

【讨论】:

在 iE8 中打破布局的好工作 在 IE9 中也破坏了布局,这不是一个好的通用解决方案。【参考方案2】:

根据我的经验,Appetere Web Solutions 拥有最好的解决方案。简单而优雅......而且它不是黑客。使用 PostBackUrl。

我刚刚试了一下,一切正常。我不想使用 javascript,因为我不想在每个使用它的页面的母版页中都包含它。

【讨论】:

【参考方案3】:

如果您将 ASP.NET 按钮添加到表单,并将其 PostBackUrl 属性设置为外部站点,则所有表单数据都将发布到该 URL。

【讨论】:

做到了。我使用这种技术从 DNN HTML 模块发布表单。 对我来说,这是迄今为止最简单、最整洁的解决方案。 太棒了!这不会破坏我能说的任何东西。干得好!【参考方案4】:

我的情况和罗斯一样——除了我的输入类型都是“隐藏”的类型。

Cowgod 的回答让我想到了我的 .aspx 页面中的嵌套表单。我最终从主 .aspx 表单 ( ) 中“取消嵌套”了我的第二个表单,并将它(连同我的 js 脚本标签)放在 body 标签下方 - 但在主 .aspx 表单标签之前。

突然间,一切都按预期提交了。这是黑客吗?

【讨论】:

【参考方案5】:

这是一个有趣的问题。理想情况下,您只需要其他用户提到的页面上的 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 对象在后面的代码中创建 post 调用。在后面的代码中看起来像这样(假设您的文本字段是一个 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 方法 啊,很好。我知道有一种方法可以从代码隐藏中做到这一点。谢谢。 效果很好。谢谢! @brendan 如果用户使用 Enter 键提交表单,这是否有效?【参考方案6】:

嵌套表单在 HTML according to the W3C 中是不可能的。您可以使用 JavaScript 或 with jQuery 来实现您的预​​期结果,正如 Peter 在名为 My Thoughts 的博客中所解释的那样。

【讨论】:

【参考方案7】:

ASP.NET 允许您在一页上有多个表单,但只有一个可以是runat=server。但是我认为你根本不能嵌套表单。

您可能必须创建一个新的母版页,一个没有表单标签的母版页,因此该表单只能在该页上工作。这不是一个好的解决方案,除非您可以将表单放在母版页的表单之外,并使用 javascript 提交第二个表单,但这也好不到哪里去。对于您要实现的目标,确实没有好的解决方案,如果是这样,我想听听。我认为您不能从代码隐藏中进行 POST 调用,可以吗?我敢肯定有什么办法。但这可能是唯一的解决方案:来自代码。

【讨论】:

以上是关于在 ASP.NET 中使用嵌入式标准 HTML 表单的主要内容,如果未能解决你的问题,请参考以下文章

什么时候应该使用标准的 html 标签/输入,什么时候应该使用 asp.net 控件?

Microsoft OCS 是不是可以嵌入到 asp.net 网页中。需要多长时间?

怎样将EXCEL嵌入ASP.net网页中,象ASP下的VBA一样的效果,并将数据库的数据读取到EXCEL中?

使用 ASP.NET 将 HTML 表导出到 Excel

在 ASP.NET MVC 中动态生成 Javascript、CSS

如何最好地在 ASP.NET 中填充 HTML 表?