ASP.NETがCustomValidatorを無視する場合、何を疑いますか?
-
07-07-2019 - |
質問
これはコードの問題と同じくらいコードのメンテナンスの問題ですが、CustomValidatorをチェックしないWebFormがあります。 1年以上前にコードに最後に触れたときは機能していましたが、ユーザーがいくつかの変更を要求したため、機能しなくなりました...
WebFormには、デフォルトの"のデータバインドドロップダウンが含まれています。 -すべて-" 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エラー(クライアント側)が発生していないこと、および&quot; OnServerValidate&quot;メソッドが内部にブレークポイントがあります。
バリデータは送信ボタンと同じバリデータグループにありますか?