母版页中的表单未提交



我正在开发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设置为明显而独特的。

如果有人有一个更好、更简单、更清洁的解决方案,我真的很想看看,因为我认为上面的解决方案不太好,但应该有效。

最新更新