使用javascript和服务器端禁用/启用requiredFieldValidators

时间:2011-07-29 17:37:54

标签: asp.net ajax validation

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

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

这很好但是服务器仍然触发requiredFieldValidator逻辑。是否有人知道如何强制服务器不验证验证器是否设置为false客户端?

5 个答案:

答案 0 :(得分:9)

DISABLE

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

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

ENABLE

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

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

答案 1 :(得分:8)

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

我能想到的另一件事是创建一个隐藏字段并通过客户端设置它,然后当你做回发来检查这个值并禁用/启用验证器时。

例如在此之后:

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

答案 2 :(得分:4)

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

如果你正在使用JQUERY,使用jQuery Selector获取元素,然后从你选择的那个中获取DOM元素。

以下是一个例子:

假设您有一个require validator 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);

答案 3 :(得分:2)

所以我没有得到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

答案 4 :(得分:0)

  ValidatorEnable($("[id$='RegularExpressionValidator4']")[0], true);