0

当关联的文本框被禁用时(无论文本框是否包含文本),必填字段验证器似乎总是会触发。

启用文本框后,验证器的行为正确。

谁能告诉我为什么?

我尝试使用 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>

任何想法都非常感激。

4

3 回答 3

1

ASP.NET 的验证器以神秘的方式工作:D

首先,使用 ASP.NET 控件的 id 在 jQuery 中访问它是很危险的。如果您将控件放在转发器中或将页面包装在母版页中,则 html 元素的 id 将与您指定的 id 不同。使用类来访问元素。

如果 ASP.NET 验证器希望启用该字段,那么您必须尝试另一种方法。我的建议是这样的:

1. 向文本框添加一个类,使其看起来被禁用:

$("#txtBrokerNetID").addClass("thisClassMakesItLookDisabled");

2. 向文本框添加一个检查焦点的事件,并在有焦点时将其模糊:

$("#txtBrokerNetID").focus(function() {
  $(this).blur();
});

现在该字段的行为就像它被禁用并且验证器工作一样。

于 2009-10-07T15:53:43.927 回答
1

现在我不知道的是,当在客户端禁用控件时,它不会包含在回发中。

这就是服务器端验证被触发的原因。就它而言,控件是空的。

解决方案是使用 readOnly 属性而不是 disabled 属性。

现在要弄清楚如何设置控件的样式以使其具有与禁用时相同的外观

于 2009-10-08T12:49:07.653 回答
0

您可以选择的一个选项是设置一个 ValidationGroup,而不是表单使用的那个,然后在Page_ClientValidate('text_validation_group')需要时验证表单调用。这样客户验证就不会妨碍。

于 2009-10-07T16:06:31.157 回答