0

我正在研究 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 页面中使用此代码,它会完美运行

4

1 回答 1

0

根据OP的问题评论...

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

<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为明显且独特的内容。

如果有人有更好、更简单、更清洁的解决方案 - 我真的很想看到它,因为我认为上述内容不是很好,但应该可以。

于 2012-07-20T08:04:42.413 回答