【问题标题】:How to exclude a control from ASP.NET validation when hidden (display:none;)?隐藏时如何从 ASP.NET 验证中排除控件(显示:无;)?
【发布时间】:2014-07-20 02:53:15
【问题描述】:

隐藏时如何从 ASP.NET 验证中排除控件?

  • 复选框用于在两个文本框之间切换。

  • 其中一个是必需的NOT BOTH

  • 我希望在隐藏时禁用必填字段。

我知道 enabled="false"visible="false" 创建了这种行为,但是我想保持 jquery 淡入淡出动画。

我尝试将禁用的 false 属性添加到 javascript,但无法使其正常工作。 网上找到的其他解决方案似乎没有达到所需要的效果。

ASP.NET

<div class="Hide1">
  <asp:TextBox ID="tb" runat="Server"/>
  <asp:RequiredFieldValidator ID="rfv1" RunAt="Server" ControlToValidate="tb"/>
</div>

<div class="Hide2">
  <asp:TextBox ID="tb2" runat="Server"/>
  <asp:RequiredFieldValidator ID="rfv2" RunAt="Server" ControlToValidate="tb2"/>
</div>

<asp:Button ID="btn" runat="Server" Text="GO"/>

JQUERY

  $('.tb').hide();
  $('#CB').change(function () {
    if ($(this).is(':checked')) {
      $('.tb2').fadeOut(100, function () {
        $('.tb').fadeIn();
      });
    } else {
      $('.tb').fadeOut(100, function () {
        $('.tb2').fadeIn();
      });
    }
  });

【问题讨论】:

  • 我依稀记得以前做过这个,但是我需要一些服务器端代码来实现它。类似于在验证表单时忽略该字段。
  • 我认为你必须使用自定义验证器

标签: javascript jquery asp.net regex validation


【解决方案1】:

你可以试试这样的

if (document.getElementById('<%=CB.ClientID%>').checked) {
   ValidatorEnable(document.getElementById('<%= rfv1.ClientID %>'), true);
   ValidatorEnable(document.getElementById('<%= rfv2.ClientID %>'), false);
   $('.tb2').fadeOut(100, function () {
        $('.tb').fadeIn();
      });
 }
 else {
       ValidatorEnable(document.getElementById('<%= rfv1.ClientID %>'), false);
       ValidatorEnable(document.getElementById('<%= rfv2.ClientID %>'), true);
       $('.tb').fadeOut(100, function () {
          $('.tb2').fadeIn();
          });
      }

注意: rfv1 和 rfv2 是两个必需验证器的 id,请避免将相同的 id 提供给验证器。

更新

if (document.getElementById('<%=CB.ClientID%>').checked) {
       ValidatorEnable(document.getElementById("#<%= rfv1.ClientID %>"), true);
       ValidatorEnable(document.getElementById("#<%= rfv2.ClientID %>"), false);
       $('.tb2').fadeOut(100, function () {
            $('.tb').fadeIn();
          });
     }
     else {
           ValidatorEnable(document.getElementById("#<%= rfv1.ClientID %>"), false);
           ValidatorEnable(document.getElementById("#<%= rfv2.ClientID %>"), true);
           $('.tb').fadeOut(100, function () {
              $('.tb2').fadeIn();
              });
          }

【讨论】:

  • 这是我正在寻找但无法正常工作的解决方案类型。
  • 你遇到了什么问题?
  • 看来 ValidatorEnable 不支持 jquery。我需要使用 getElementsByClass,因为我在页面上有很多验证器,而不仅仅是两个,而且使用 ID 会创建很多代码。
  • 是的验证器启用不支持 jquery.. :( 寻找替代解决方案。
  • 我认为这就像使用 jquery 向控件添加启用或可见 false 一样简单
【解决方案2】:

只需将控件的属性“CauseValidation”设置为“False”即可。 例如

<asp:TextBox ID="TextBox1" runat="server" CausesValidation="false"></asp:TextBox>

这必须在服务器端代码中完成。

希望这会有所帮助。

编辑 1

如果必须在 javascrpt 中完成 .. 我认为应该在验证中检查控件的可见性

function validate()
{
 if control is hidden
 { avoid validation
 }
 else
 {validate
 }
}

【讨论】:

  • 触发 javascript 时需要交替使用此条件,因此在这种情况下无法执行服务器端代码。
  • 谢谢。它确实需要是 javascript,你的建议是我想要实现的,但收效甚微。
  • 现在阻止了什么?
【解决方案3】:

禁用必填字段验证器

 document.getElementById('RequiredFieldValidator1').enabled=false;

启用必填字段验证器

 document.getElementById('RequiredFieldValidator1').enabled=true;

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多