【问题标题】:How not to trigger RequiredFieldValidator on hidden field (TextBox)如何不在隐藏字段(文本框)上触发RequiredFieldValidator
【发布时间】:2011-04-19 00:36:24
【问题描述】:

我认为这是一个常见问题。我有一个表单,我使用 jQuery 动态显示/隐藏字段,具体取决于一些单选按钮。

我在所有字段上都有RequiredFieldValidator,但如果它们的ControlToValidate 被隐藏(使用jQuery),我不希望它们被触发。

这可能吗?提前致谢。

编辑:这是解决方案,感谢 Marek。如果您因为 MasterPages 而有奇怪的 clientID,这可能不是很明显

这是 ASPX

<asp:TextBox ID="txtName" runat="server" />
<asp:RequiredFieldValidator ID="vldName" ControlToValidate="txtName" runat="server" ErrorMessage="You must enter Name!" />
...
<asp:Button ID="btnSubmit" runat="server" Text="Submit" />

这是 jQuery

$(function() {
  $('#ctl00_cphContent_btnSubmit').click(function() {
    if (!$('#ctl00_cphContent_txtName').is(':visible'))
      ValidatorEnable(ctl00_cphContent_vldName, false);
  });
});

希望它能让某人的生活更轻松

【问题讨论】:

  • 快速提示,切勿在 javascript 中对控件的 ID 进行硬编码,而是使用 $('#').click...。

标签: asp.net validation


【解决方案1】:

如果我没记错的话,有一个名为 ValidatorEnable(validatorClientId, isEnabled) 的函数允许您通过 javascript 禁用/启用 ASP.NET 验证器。您可以在表单提交之前使用 jQuery 来禁用所有不可见的验证器。

这里的验证器有一些关于客户端 API 的文档http://msdn.microsoft.com/en-us/library/aa479045.aspx

【讨论】:

  • 这是一个 2000 年的老式文档的链接,于 2002 年更新,所以 .NET 1.0?提到 HTML 3.2,好久没有想到了。
【解决方案2】:

当您从 C# 代码设置可见性时,您可以将控件设置为从 C# 代码验证属性。这将解决您的问题。

if ($('#input-name').length) {  
       // do something

}

这将解决你的问题

【讨论】:

  • 问题是我使用 jQuery 来避免不必要的回发和延迟。不涉及 C#。
  • Aximili - 如果您使用 jQuery,那么我确信不需要名为 RequiredFieldValidator 的控件,因为它是一个 ASP.net 控件。此外,在 jQuery 中,您可以编写代码首先检查该控件是否存在。
  • 你说得对,我目前正在编写自己的验证器。我只是想知道我是否仍然可以使用 ASP.NET 验证器,因为这意味着我需要编写更少的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多