web-dev-qa-db-ja.com

MVC:非表示フィールドでクライアント側の検証を有効にする方法

@ Scripts

_ <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.js")"></script>
  <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")"></script>
_

@ View

_@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="display:none"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}
_

私が試したもの

  1. ignore: ":hidden"、ignore: ""に置き換え、 validate.js内
  2. var validateMeta = $( '#form123')。validate(); validateMeta.settings.ignore = "";

  3. $.validator.setDefaults({ignore: ""});

  4. $.validator.setDefaults({ ignore: [] });

22
RollerCosta

私はこれと同じ問題に遭遇しました。ページの非表示フィールドには、オートコンプリートテキストボックスから選択されたユーザーIDが格納されていました。このIDには、ゼロ以外のIDがポストバックされたことを確認するための検証がありました。この検証をクライアント側に含めたかったのです。

デフォルトでは、jQuery検証は、非表示フィールド、幅と高さがゼロの要素、css display:noneを持つ要素、および(同じ基準を使用して)非表示の親を持つ要素を無視します。

ただし、次のスクリプトを追加することで、無視の設定を上書きできます($ .validator.addMethod()を呼び出す前に、カスタムバリデータースクリプトに追加しただけです)。

_// By default validator ignores hidden fields.
// change the setting here to ignore nothing
$.validator.setDefaults({ ignore: null });
_

注:このコードは、_document ready_またはjQuery $(function () {})メソッド内で実行すると機能しません。

43
Robin Hames

検証用のスクリプトを挿入した直後に、ignoreを ""に設定します。

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    <script type="text/javascript">
    $.validator.setDefaults({
        ignore: ""
    });
    </script>
}
12
IonutC

試す

 var validator = $("#form-id").data('validator');
 validator.settings.ignore = "";
7
Mr.LamYahoo

ユーザーが表示または編集できないフィールドの検証を表示する必要がある理由がわかりません。しかし、これを試すことができます。の代わりに display:none、適用visibility:hiddenおよびheight:0を入力フィールドに追加します。

@using (Html.BeginForm("TestModelState", "RandD", FormMethod.Post, new {id="form123" }))
{ 
    @Html.TextBoxFor(x => x.htmlText, new { style="visibility:hidden;height:0"})<br />
    @Html.ValidationMessageFor(x => x.htmlText)
    <div>
      @Html.TextBoxFor(x => x.Uprop1)<br />
      @Html.ValidationMessageFor(x => x.Uprop1)
    </div>
    <input type="submit" value-="Submit" onclick="abc()" />
}
5
sanjeev