我有一个带有嵌套母版页的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函数,并且表单没有被重定向到子母版页的发布网址。如果我在没有母版页的独立页面中使用此表单,它可以正常工作。
请建议如何在子母版页内部强制表单转到发布网址?
答案 0 :(得分:3)
根据HTML标准,您不能拥有嵌套表单,即表单内部形式。 您如何在表单标记之外的母版页中创建另一个内容占位符 然后您可以在子页面中使用表单。像这样:
在您的母版页中:
<form>
----
----
</form>
<asp:ContentPlaceHolder id="cp2" runat="server">
</asp:ContentPlaceHolder>
在您的子页面中,在此标记中添加表单:
<asp:Content ID="Content3" ContentPlaceHolderID="cp2" Runat="Server">
</asp:Content>
答案 1 :(得分:0)
在此处查看Quentin的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>