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

geo*_*rtz 8 asp.net validation ajax

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

ValidatorEnable(document.getElementById(validatorId), false);
Run Code Online (Sandbox Code Playgroud)

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

小智 10

DISABLE

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

document.getElementById("<%=ReqVal.ClientID%>").enabled = false;
Run Code Online (Sandbox Code Playgroud)

ENABLE

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

document.getElementById("<%=ReqVal.ClientID%>").enabled = true;
Run Code Online (Sandbox Code Playgroud)


Jon*_*onH 8

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

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

例如,在此之后:

JS:

ValidatorEnable(document.getElementById(validatorId), false);
var hidden = document.getElementById(hiddenID);
hidden = "1";
Run Code Online (Sandbox Code Playgroud)

然后在你的加载事件中:

If (hidden = "1") then
 validator.enabled=false
end if
Run Code Online (Sandbox Code Playgroud)

看一下这篇文章,与你的相似:ASP.NET - 如何阻止不需要的服务器验证

  • 你是对的.我应该去洗手间...简单的解决方案永远不会坐在我的办公桌上,但似乎总是打我的话:)谢谢! (3认同)
  • @geoff swartz - 离开办公桌后得到想法是很正常的..我发现自己在半夜找到解决方案,奇怪的是我第二天早上真的想上班...... (2认同)

小智 6

需要验证器作为 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);
Run Code Online (Sandbox Code Playgroud)

全部在一行代码中

ValidatorEnable( $("span[id$=MyReqValidator]").get(0), true);
Run Code Online (Sandbox Code Playgroud)