【问题标题】:Disabling/enabling requiredFieldValidators with javascript and server side使用 javascript 和服务器端禁用/启用 requiredFieldValidators
【发布时间】:2011-10-16 03:41:05
【问题描述】:

我有一个需要的下拉菜单 (dropdown2) IF 里面有东西,但它的选项数据是由另一个下拉菜单 (dropdown1) 选择中的 ajax 驱动的。有时 dropdown2 将是空的,在这种情况下我不能要求它。所以我可以通过调用这个来禁用javascript中的requiredFieldValidators...

ValidatorEnable(document.getElementById(validatorId), false);

这工作正常,但服务器仍会触发 requiredFieldValidator 逻辑。有谁知道我如何强制服务器不验证验证器是否设置为假客户端?

【问题讨论】:

    标签: asp.net ajax validation


    【解决方案1】:

    禁用

    document.getElementById("<%=ReqVal.ClientID%>").style.visibility = "hidden"; 
    
    document.getElementById("<%=ReqVal.ClientID%>").enabled = false;
    

    启用

    document.getElementById("<%=ReqVal.ClientID%>").style.visibility = "visible"; 
    
    document.getElementById("<%=ReqVal.ClientID%>").enabled = true;
    

    【讨论】:

    • 如果是 ASP Validator 你可以保持它的 display="dynamic" 这样你就可以避免在此处设置样式来隐藏验证消息
    【解决方案2】:

    为什么不直接使用客户端验证器?这样做会让你的工作变得更加困难。如果您可以通过客户端访问它,为什么还要在服务器端访问它?

    我能想到的唯一另一件事是创建一个隐藏字段并通过客户端设置它,然后在您执行回发时检查此值并禁用/启用验证器。

    例如在此之后:

    JS:

    ValidatorEnable(document.getElementById(validatorId), false);
    var hidden = document.getElementById(hiddenID);
    hidden = "1";
    

    然后在你的加载事件中:

    If (hidden = "1") then
     validator.enabled=false
    end if
    

    看看这个帖子,和你的很相似:ASP.NET - how to stop unrequired server validation

    【讨论】:

    • 你是对的。我应该去洗手间......简单的解决方案从来没有出现在我的办公桌上,但似乎总是让我感到震惊:)谢谢!
    • @geoff swartz - 离开办公桌后得到想法是很正常的。我发现自己在半夜找到解决方案,奇怪的是我真的想进入第二天早上上班……
    【解决方案3】:

    要求验证器作为 span 元素注入 DOM。

    如果您使用的是 JQUERY,请使用 jQuery 选择器获取元素,然后从该选择中获取 DOM 元素并进行设置。

    这是一个例子:

    假设您有一个需要验证器 id="MyReqValidator"。

    在您的 javascript 文件中,您将执行以下操作:

    //The jQuery Element:
    jqValidator = $("span[id$=MyReqValidator]");
    
    //No the DOM element. This is what document.getElementById would return.
    domValidator = jqValidator.get(0)
    
    //Now enable your validator:
     ValidatorEnable(validator, true);
    

    一行代码

    ValidatorEnable( $("span[id$=MyReqValidator]").get(0), true);
    

    【讨论】:

    • 这个答案值得更多的认可。
    【解决方案4】:

    所以我没有让 JonH 回答工作,剩下的只是客户端。所以这是我的解决方案:

    在客户端禁用RequiredFieldValidator:

    ValidatorEnable(document.getElementById("rfv"), false);
    

    要在服务器端禁用RequiredFieldValidator,您可以像这样override the Validate() method

    public override void Validate()
    {
        bool disableRfv = input_to_check <> 1;
        rfv.Enabled = disableRfv;
        base.Validate();
    }
    

    或者,在 VBasic 中:

    Public Overrides Sub Validate()
        Dim disable_rfv As Boolean = input_to_check <> 1
        rfv.Enabled = disable_rfv
    
        MyBase.Validate()
    End Sub
    

    【讨论】:

    • 赞成这个答案,因为它涵盖了客户端和服务器端验证。对于那些不会 VBasic 的人,一个 C# 示例可能会更清楚: ``` public override void Validate() { bool disableRFV = input_to_check 1; rfvAddress1.Enabled = 禁用RFV; base.Validate(); } ```
    • 谢谢,用 C# 回答 C# 问题确实更好
    • 我已经用 C# 作为更高优先级的代码示例编辑了答案。如果你喜欢 VB 作为第一个,可以把它调低——我不喜欢,只是按更高的使用频率优先级。
    【解决方案5】:
      ValidatorEnable($("[id$='RegularExpressionValidator4']")[0], true);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 2013-06-07
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 2012-01-30
      相关资源
      最近更新 更多