当关联的文本框被禁用时(文本框是否包含文本),似乎总是要触发必填字段验证器。
启用文本框后,验证程序的行为正确。
有人可以告诉我为什么吗?
我尝试使用ValidatorEnable禁用所需的字段验证器,但这似乎没有区别。
以下是页面中的相关HTML(缩减):
<tr id="trBrokerNetID" runat="server">
<td>
<cc1:mitextbox id="txtBrokerNetID" runat="server" cssclass="bodytext" width="220px" maxlength="20" onBlur="JavaScript:CheckBrokerBranch(false);"></cc1:mitextbox>
<asp:requiredfieldvalidator id="rfvBrokerNetID" runat="server" width="1px" errormessage="BrokerNetID - Please supply a value" controltovalidate="txtBrokerNetID">*</asp:requiredfieldvalidator>
</td>
</tr>
感激地收到任何想法。
答案 0 :(得分:1)
ASP.NET的验证器以神秘的方式工作:D
首先,使用ASP.NET控件的id在jQuery中访问它是危险的。 如果将控件放在转发器中或将页面包装在母版页中,则html元素的id将与您指定的id不同。使用class来代替访问元素。
如果ASP.NET验证程序希望启用该字段,那么您必须尝试其他方法。 我的建议是:
1。 在文本框中添加一个类,使其看起来已禁用:
$("#txtBrokerNetID").addClass("thisClassMakesItLookDisabled");
2。 添加一个将焦点检查到文本框的事件,如果有焦点则将其模糊:
$("#txtBrokerNetID").focus(function() {
$(this).blur();
});
现在该字段的行为就像它被禁用并且验证器一样。
答案 1 :(得分:1)
现在我不知道的是,当在客户端上禁用控件时,它不会包含在回发中。
这就是服务器端验证被解雇的原因。就其而言,控制权是空的。
soolution是使用readOnly属性而不是disabled属性。
现在要弄清楚如何设置控件的样式,使其具有相同的外观,就像它被禁用一样。
答案 2 :(得分:0)
您可以选择的一个选项是设置ValidationGroup而不是表单使用的ValidationGroup,然后在需要时验证表单调用Page_ClientValidate('text_validation_group')
。这样客户端验证就不会妨碍。