以下のように検証された隠しフィールドがあります
@Html.HiddenFor(m => m.Rating)
@Html.ValidationMessageFor(m => m.Rating)
Rating
プロパティには、Range
1〜5の範囲で適用されるバリデーター属性があります。これは、送信ボタンのあるフォーム内に配置されます。
次に、いくつかのユーザーイベントの非表示フィールドに値を設定する次のjqueryを取得しました(基本的に、ユーザーはいくつかの星をクリックして評価します)
$(".star").click(function(){
$("#Rating").val(2);
});
これで、非表示フィールドを設定するユーザーイベントなしでフォームを送信すると、検証が機能します。エラーメッセージは正しく表示され、すべてのクライアント側で機能します。
さて、この状況で、上記のjavascriptを呼び出して隠しフィールドを設定する星をクリックしても、検証エラーメッセージは消えません。非表示の変数に有効な値が設定されたら、フォームを送信できます。しかし、私はクライアント側の検証が機能することを期待しています。(非表示の変数に有効な値が設定されている場合、検証エラーは解消されます)
当初、jquery検証はいくつかの特別なイベントで呼び出されると思っていたので、クリック、変更、キーアップ、ぼかし、フォーカスアウトの各イベントを以下のように自分で上げてみました
$(".star").click(function(){
$("#Rating").val(2);
$("#Rating").change();
});
しかし、これはまだ機能していません。一度表示されたエラーメッセージは、まったく消えません。