当 ASP.NET 忽略 CustomValidator 时您会怀疑什么?
-
07-07-2019 - |
题
这既是代码维护问题,也是代码问题,但我有一个 WebForm,它不再检查 CustomValidator。当我一年多前最后一次接触代码时它起作用了,但现在用户请求了一些更改,它不再起作用了......
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>
解决方案
我注意到几个问题
- 如果 AutoPostBack 设置为 false,我认为您不需要 CausesValidation=true
- 您不使用验证组,因此这不是原因
- 为什么不使用RequiredFieldValidator?
- 如果要在空字段上触发验证,请将 ValidateEmptyText 属性设置为 true
其他提示
如果正在验证的控件具有空值,则不会触发CustomValidator,因此CustomValidator应始终伴随RequiredFieldValidator
一些故障排除步骤:
- 这是表单上唯一的验证器吗?
- 页面上是否启用了验证?
- 是否为目标对照启用了验证?
- 验证器本身是否已启用?
我会认真看看ValidationGroup。
如果群组中遗漏了某些内容,则无法再进行验证。否则,请确保您没有任何javascript错误(对于客户端)和那个“OnServerValidate”的方法。里面有一个断点。
验证器与提交按钮位于同一验证器组中吗?
不隶属于 StackOverflow