一页上有多个表单的问题

时间:2010-03-30 18:26:28

标签: html forms

我在网页上有两个表单。

第一个不是实际的表单,因为这是一个基于.NET的站点。所以我有标准输入字段,以及asp:Button PostBackURL =“http:/ www ...”。其中一个字段是“电子邮件”。这很好。

然后我有一个带有另一个表单的XSLT文件,并使用Javascript(通过this.form.action,.method等)发布该表单。除此之外,它与上面的表格具有相同的字段。

问题是,当有人提交第二个表单时,PostBackURL上的脚本会返回错误,因为“email”字段显示为空。因此,表单似乎是从顶层表单而不是当前表单提交“email”字段。

我想可能提交了错误的表单,但是如果我从顶部表单中删除“email”字段,然后提交底部表单,则可以正常工作。

有关如何解决此问题的任何想法?感谢。

4 个答案:

答案 0 :(得分:1)

如果没有看到页面的结构,可能会关闭(如果有的话,我道歉):

通常说,您通过Javascript(提交)控制的FORM应该在“主”asp.net服务器端表单之外。

结构如此:

<html>
<body>
   <form id="the_asp_net_server_side_form" runat="server">       
    ....asp.net controls, content, etc.....
    ....this section is the server-side asp.net form.....
   </form>

   <form id="standard_html_form1" action="blah">
        ....standard html <input> fields
        ....do whatever you want with javascript
        ....if you need to use "old school/legacy" asp style <%= %> code, do so
   </form>

   <form id="standard_html_form2" action="blah">
        ....standard html <input> fields
        ....do whatever you want with javascript
        ....if you need to use "old school/legacy" asp style <%= %> code, do so
   </form>
</body>
</html>

这当然假设您需要在ASP.net应用程序之外发布数据(到某些外部URL)....

答案 1 :(得分:0)

该电子邮件字段是否已停用?如果是,某些浏览器将不会将数据发送到服务器。你可以做什么,如果是,是提交,启用该电子邮件字段。

答案 2 :(得分:0)

作为快速修复黑客,您可以将隐藏的电子邮件文本框编码为第二个/底部表单,并将其文本设置为空字符串""或者可能是虚拟电子邮件。

它没有解决问题,但它应该可以解决问题。

答案 3 :(得分:0)

我会通过查看源来检查HTML,但可能的罪魁祸首是你不能在HTML中使用嵌套表单。如果您在HTML中嵌套表单,则会忽略内部表单并提交外部表单。

<form id="outer" onsubmit="alert('outer');return false;">
    <form id="inner" onsubmit="alert('inner');return false;">
        <input type="submit" value="Go" />
    </form>
</form>

您可以在此处演示此行为:http://jsfiddle.net/eRZQD/

鉴于此,您可能正在尝试提交内部表单,但实际上正在提交外部表单,其中包括导致您出错的空白电子邮件字段。您肯定会想要删除嵌套或重写HTML,以便内部提交按钮与外部提交按钮略有不同。