9

以下のように検証された隠しフィールドがあります

@Html.HiddenFor(m => m.Rating)
@Html.ValidationMessageFor(m => m.Rating)

Ratingプロパティには、Range1〜5の範囲で適用されるバリデーター属性があります。これは、送信ボタンのあるフォーム内に配置されます。

次に、いくつかのユーザーイベントの非表示フィールドに値を設定する次のjqueryを取得しました(基本的に、ユーザーはいくつかの星をクリックして評価します)

$(".star").click(function(){
    $("#Rating").val(2);
});

これで、非表示フィールドを設定するユーザーイベントなしでフォームを送信すると、検証が機能します。エラーメッセージは正しく表示され、すべてのクライアント側で機能します。

さて、この状況で、上記のjavascriptを呼び出して隠しフィールドを設定する星をクリックしても、検証エラーメッセージは消えません。非表示の変数に有効な値が設定されたら、フォームを送信できます。しかし、私はクライアント側の検証が機能することを期待しています。(非表示の変数に有効な値が設定されている場合、検証エラーは解消されます)

当初、jquery検証はいくつかの特別なイベントで呼び出されると思っていたので、クリック、変更、キーアップ、ぼかし、フォーカスアウトの各イベントを以下のように自分で上げてみました

$(".star").click(function(){
    $("#Rating").val(2);
    $("#Rating").change();
});

しかし、これはまだ機能していません。一度表示されたエラーメッセージは、まったく消えません。

4

5 に答える 5

5

隠しフィールドを、どこかに置いたdivでラップすることができますが、それでも<form>。cssを追加して、宇宙空間にキックします。

<div style="position:absolute; top:-9999px; left:-9999px">
<input id="Rating" type="hidden" name="rating" >
</div>

次に、エラーを表示する場所に次のラベルを追加します。

<label for="rating" class="error" style="display:none">I am an an error message, please modify me.</label>
于 2011-11-14T15:27:38.790 に答える
5

クライアント側の検証では、非表示のフィールドは無視されます。「無視」オプションを動的に設定できますが、それを機能させるために、.jsファイルで次のように直接実行しました。

今のところ、これでうまくいくはずです。

私のaspxでは...

<%: Html.HiddenFor(model => model.age, new { @class="formValidator" }) %>

jquery.validate.jsで

ignore: ":hidden:not('.formValidator')",
于 2013-07-22T15:47:00.507 に答える
5

これは非常に興味深い問題であることが判明しました。デフォルトの「無視」設定は、非表示フィールドを無視します。このフィールドは、jQueryuiプラグインで非表示になっています。検証したいレンダリングされた入力に「includeCheckBox」というクラスを追加し、次のコード行を追加しました...

var validator = $('#formMyPita').validate();
validator.settings.ignore = ':hidden:not(".includeCheckBox")';
if ($('#formMyPita').valid()) {....
于 2013-12-18T19:14:28.010 に答える
2

非表示フィールドの値を設定するコードで、次のようにフォームの検証を手動で呼び出します。

$("form").validate().form();
于 2011-10-17T18:36:15.807 に答える
1

非表示の入力はこれらのイベントを発生させないためだと思います。

代わりにできること<input type="text" style="display:none" />は、隠しフィールドの代わりに使用することです。

@html.TextBoxFor(m => m.Rating, new {display = "display:none"})
于 2011-10-17T08:07:09.740 に答える