我正在开发asp.net应用程序。在我的应用程序主页中,我有一个边栏分区。我在其中插入了一个订阅表单,看起来像这样:
<form method="post" action="https://app.icontact.com/icp/signup.php" name="icpsignup" id="icpsignup3297" accept-charset="UTF-8" onsubmit="return verifyRequired3297();" >
...
<input type="submit" name="Submit" value="Get Deals">
<form>
单击按钮时调用的javascript函数如下所示:
<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() {
alert('testing');
if (icpForm3297["fields_email"].value == "") {
icpForm3297["fields_email"].focus();
alert("The Email field is required.");
return false;
}
return true;
}
</script>
当我点击提交按钮时,页面会重新加载,但表单不会重定向到其他页面(重定向url)是因为代码在母版页中吗?甚至没有显示测试警报。
如果我在一个没有母版页的新asp.net页面中使用此代码,它将完美地运行
基于OP…的问题评论
嵌套<form>
标记是无效的HTML(无论它们是否标记为runat="server"
)。例如,这是不允许的,并且将失败。。。
<form>
...
<form>
...
</form>
...
</form>
我唯一能想到的就是做以下事情。。。
- 在主
<form runat="server">
之外,根据问题中的内容创建一个新的<form>
- 用需要传递的所有
<input type="hidden">
字段填充新的<form>
- 从原始位置移除
<form>
标记,留下用户要使用的控件/布局 - 在原始
<input type="submit">
上设置一个处理程序(如onclick="submitMyForm();return false;"
)(或者用一个普通按钮(基于HTML或ASP.NET)替换它,并将处理程序设置为该按钮) - 创建要调用的JavaScript函数
javascript函数可能看起来像这样。。。
function submitMyForm(){
document.getElementById("myNewFormCtrl1").value =
document.getElementById("<%=myOldFormCtrl1.ClientId%>").value;
...
document.getElementById("myNewForm").submit();
}
请记住,必须为<input type="hidden">
指定一个name
属性,该属性将传递给正在接收表单的页面。您还必须为其指定一个将由函数中的getElementById
使用的id
属性。它们必须是相同的,所以我建议您将id
设置为明显而独特的。
如果有人有一个更好、更简单、更清洁的解决方案,我真的很想看看,因为我认为上面的解决方案不太好,但应该有效。