我有一个需要的下拉列表(dropdown2) IF 中有一些东西,但它的选项数据是由另一个下拉列表(dropdown1)选择的ajax驱动的。有时dropdown2将为空,在这种情况下我不能要求它。所以我可以通过调用这个来禁用javascript中的requiredFieldValidators
...
ValidatorEnable(document.getElementById(validatorId), false);
这很好但是服务器仍然触发requiredFieldValidator
逻辑。是否有人知道如何强制服务器不验证验证器是否设置为false客户端?
答案 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);