母版页中的表单未提交

时间:2012-07-19 15:22:10

标签: c# asp.net

我正在开发asp.net应用程序。在我的应用程序的母版页中,我有一个侧边栏div。我在其中插入了一个表单,用于订阅,如下所示:

<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页面中使用此代码,它可以完美地运行

1 个答案:

答案 0 :(得分:0)

基于OP的问题评论......

嵌套<form>标记是否无效HTML(无论它们是否标记为runat="server")。例如,这是不允许的,并且会失败......

<form>
  ...
  <form>
    ...
  </form>
  ...
</form>

我唯一能想到的就是以下......

  • 根据问题中的一个<form>
  • 创建新的<form runat="server">
  • 使用您需要传递的所有<form>字段填充新的<input type="hidden">
  • 从原始位置移除<form>标记,保留用户将要使用的控件/布局
  • onclick="submitMyForm();return false;"之类的处理程序设置为原始<input type="submit">(或使用普通按钮替换它 - 基于HTML或ASP.NET - 并将处理程序设置为该
  • 创建要调用的JavaScript函数

javascript函数可能看起来像这样......

function submitMyForm(){
  document.getElementById("myNewFormCtrl1").value = 
    document.getElementById("<%=myOldFormCtrl1.ClientId%>").value;
  ...
  document.getElementById("myNewForm").submit();
}

请记住,必须为<input type="hidden">提供name属性,该属性将传递给接收表单的页面。您还必须为其提供id属性,该属性将由函数中的getElementById使用。这些必须相同,因此我建议您将id设置为明显且独特的内容。

如果有人有一个更好,更简单,更清洁的解决方案 - 我真的很有兴趣看到它,因为我认为上述内容并不好,但应该有效。