当 ASP.NET 忽略 CustomValidator 时,您会怀疑啥?

Posted

技术标签:

【中文标题】当 ASP.NET 忽略 CustomValidator 时,您会怀疑啥?【英文标题】:What do you suspect when ASP.NET ignores a CustomValidator?当 ASP.NET 忽略 CustomValidator 时,您会怀疑什么? 【发布时间】:2008-11-11 19:35:46 【问题描述】:

这与代码问题一样是代码维护问题,但我有一个不再检查 CustomValidator 的 WebForm。一年多前我最后一次接触代码时它起作用了,但现在用户请求了一些更改,它不再起作用了......

WebForm 包含一个数据绑定下拉菜单,其中包含默认的“-All-”项,其值为 String.Empty。当用户单击提交按钮时,验证器应检查下拉列表的值是否不是 String.Empty。我在客户端验证代码和服务器验证代码中设置了断点,但都没有触发。

你会从哪里开始寻找?常见的嫌疑人是什么?当然,我已经将我的工作副本与源代码控制中的内容进行了比较,但没有任何可疑之处。

以防万一,这是我的代码:

<asp:DropDownList ID="_AssessmentDropDown" runat="server" DataSourceID="_AssessmentsData" CausesValidation="true" AutoPostBack="false"
    DataTextField="AssessmentName" DataValueField="AssessmentName" OnDataBound="_HandleAssessmentsBound">
</asp:DropDownList>
<asp:CustomValidator ID="_AssessmentValidator" runat="server" ClientValidationFunction="_HandleValidateAssessment_Client"
    ControlToValidate="_AssessmentDropDown" ErrorMessage="* You must select an Assessment."
    OnServerValidate="_HandleValidateAssessment" />
<asp:ObjectDataSource ID="_AssessmentsData" runat="server"
    OldValuesParameterFormatString="original_0" SelectMethod="GetData"
    TypeName="DataTableAdapters.GET_GRADE_ASSESSMENTSTableAdapter">
    <SelectParameters>
      <asp:ControlParameter Name="GRADECODE" ControlID="_GradeCodeDropDown" PropertyName="SelectedValue" />
    </SelectParameters>
</asp:ObjectDataSource>

【问题讨论】:

【参考方案1】:

我注意到几个问题

如果 AutoPostBack 设置为 false,我认为您不需要 CausesValidation=true 您没有使用验证组,所以这不是原因 为什么不使用RequiredFieldValidator? 如果要对空字段进行验证,请将 ValidateEmptyText 属性设置为 true

【讨论】:

ValidateEmptyText 可以解决问题,但我想知道为什么去年没有问题。 ValidateEmptyText 的行为是否发生了变化?如果没有,我的默认值肯定已经改变了。 非常感谢,ValidateEmptyText 也导致了我的问题。 谢谢,ValidateEmptyText 属性也导致了我的问题。【参考方案2】:

如果正在验证的控件具有空值,则 CustomValidator 不会触发,因此 CustomValidator 应始终伴随 RequiredFieldValidator

【讨论】:

【参考方案3】:

一些故障排除步骤:

这是表单上唯一的验证器吗? 页面上是否启用了验证? 是否为目标控件启用了验证? 验证器本身是否启用?

【讨论】:

【参考方案4】:

我会认真研究一下 ValidationGroup。

如果某些内容被排除在组之外,它将不再有效。否则,请确保您没有任何 javascript 错误(对于客户端)并且“OnServerValidate”方法内部有一个断点。

【讨论】:

【参考方案5】:

验证器是否与提交按钮在同一个验证器组中?

【讨论】:

以上是关于当 ASP.NET 忽略 CustomValidator 时,您会怀疑啥?的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net Routing:如何忽略多个通配符路由?

ASP.NET Core 托管环境变量被忽略

ASP.NET cosmosDB,忽略额外的元素?

如何忽略asp.net表单中的路由url路由

ASP.NET MVC 2 - 如何使用 IgnoreRoute 忽略整个目录?

JQuery 验证忽略本地化文件 (ASP.NET MVC)