【问题标题】:two forms on one asp.net page一个asp.net页面上的两个表单
【发布时间】:2012-07-19 10:02:24
【问题描述】:

我有一个带有嵌套母版页的 asp.net 页面。父母版页有这样的表单标签:

 <form runat="server">
 ...
 ....
 </form>

在子母版页中。我有一个侧边栏,其中有另一种形式(不是 runat=server"),如下所示:

<form method="post" action="https://app.icontact.com/icp/signup.php" name="icpsignup" id="icpsignup3297" accept-charset="UTF-8" onsubmit="return verifyRequired3297();" >

<input type="hidden" name="redirect" value="http://www.abconline.com/newsletter-sign-up.aspx">
<input type="hidden" name="errorredirect" value="http://www.icontact.com/www/signup/error.html">

....
....
....
<input type="submit" name="Submit" value="Get Deals">
</form>

<script type="text/javascript">

    var icpForm3297 = document.getElementById('icpsignup3297');

    if (document.location.protocol === "https:")

        icpForm3297.action = "https://app.icontact.com/icp/signup.php";
    function verifyRequired3297() {
        if (icpForm3297["fields_email"].value == "") {
            icpForm3297["fields_email"].focus();
            alert("The Email field is required.");
            return false;
        }


        return true;
    }
</script>

但是当我点击提交按钮时,会发生回发,但不会调用 javascript 函数并且表单不会重定向到子母版页的发布 url。如果我在没有母版页的独立页面中使用此表单,它工作正常。

请建议如何强制子母版页内的表单转到发布 URL?

【问题讨论】:

标签: c# asp.net


【解决方案1】:

在此处查看昆汀的answer。根据 HTML 标准,您不能将表单相互嵌入。如果你这样做,大多数浏览器都会忽略内部表单。

最好的解决方案是在母版页上创建一个额外的 asp:Content,您可以在其中放置辅助表单。

您可以从基本母版页级联 asp:Content:

<!-- on base master page -->
<form runat="server" ...>
    main content here
</form>

<asp:ContentPlaceHolder runat="server" ID="SecondaryFormContentBase"></asp:ContentPlaceHolder>


<!-- on child master page -->
<asp:Content ID="Content1" ContentPlaceHolderID="SecondaryFormContentBase" Runat="server">
    <asp:ContentPlaceHolder runat="server" ID="SecondaryFormContent"></asp:ContentPlaceHolder>
</asp:Content>

【讨论】:

  • 如果我在子母版页中创建另一个 asp.net contentplaceholder,那么我需要确保这个 contentplaceholder 不在父母版页的表单标签内?或者它可以在父母版页的表单标签内,我仍然可以在子母版页中添加一个表单,它会起作用吗?
  • 它需要在任何表单标签之外,否则渲染的 HTML 将最终嵌入一个表单标签(我们试图避免的确切问题)。
  • 但我的问题是页面的结构方式是基本母版页有一个表单,然后是一个 ContentPlaceHolder,子母版页通过放置自己的内容来覆盖此 ContentPlaceHolder。我将我的表单放在这个 ContentPlaceHolder 中,它被子母版页覆盖。
  • 所以创建一个级联的内容占位符,一直到子母版页。我已经用详细信息编辑了我的答案。
【解决方案2】:

根据 HTML 标准,您不能有嵌套的表单,即表单内的表单。 如何在表单标签之外的母版页中创建另一个内容占位符 然后您可以在子页面中使用表单。像这样:

在您的母版页中:

<form>
----
----
</form>

<asp:ContentPlaceHolder id="cp2" runat="server">

</asp:ContentPlaceHolder>

在您的子页面中,在此标签中添加表单:

<asp:Content ID="Content3" ContentPlaceHolderID="cp2" Runat="Server">
</asp:Content>

【讨论】:

    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 2014-06-03
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多