0

我有一个带有母版页的典型 .NET 页面。该网页有一个asp:Button调用 javascript 函数Form_Validator()Form_Validator()无论我尝试什么,我都无法在函数中获取表单。它始终为空。

我也尝试过像这样传递表单的传统方法:OnClientClick="Form_Validator(this.form);,但没有任何效果。我只是觉得它与母版页有关?

<asp:Button ID="cmdSubmit" runat="server" Text="Submit" OnClientClick="Form_Validator();" OnClick="cmdSubmit_Click" />

<script type="text/javascript">
function Form_Validator() {
var theForm = document.getElementById(this.Form1);
alert(theForm);
</script>
4

2 回答 2

2

ASP.net 具有 ClientID,它是呈现给页面的 ID。你可以使用

<script type="text/javascript">
   function Form_Validator() {
   var theForm = document.getElementById("<%=this.Form1.ClientID%>");
   alert(theForm);
</script>

这会将呈现给页面的 FormID 插入到您的 javascript 中。如果您不使用“静态”客户端 ID 模式,这也是您访问其他表单元素的方式。

例如:

<form id="Form1" runat="server">
     <asp:TextBox ID="txtABox" runat="server" />
</form>
<script type="text/javascript">
   function Form_Validator() {
   var theForm = document.getElementById("<%=this.Form1.ClientID%>");
   alert(theForm);
   var aBox = document.getElementByID("<%=txtABox.CLientID%>")
</script>

在旁注中,我会查看内置的 asp.net 表单验证器。还有一个很好的深入了解 asp.net 验证器

于 2012-05-11T01:44:40.597 回答
2

它可能确实与母版页有关,因为 ASP.NET 将使用像“[Content Placeholder ID]_[Control]”这样的命名约定。这应该可以工作:

var theForm = document.forms[0];

或者,您可以尝试将“ClientIDMode”(在页面指令中)设置为“静态”,这将告诉 ASP.NET 按照您告诉它的方式分配 ID,而不是使用所有疯狂的嵌套命名约定。

于 2012-05-11T01:05:17.390 回答