17

私は以下の見解を持っています:

    @Html.LabelFor(m => m.CompanyPostCode)
    @Html.TextBoxFor(m => m.CompanyPostCode)

    @Html.LabelFor(m => m.CompanyCity)
    @Html.TextBoxFor(m => m.CompanyCity)

    @Html.HiddenFor(m => m.CompanyCityID)

ビューモデルでは、すべての属性が[必須]としてマークされています。次に問題は、CompanyCityID(必須としてマークされている)が非表示になっているため、ビューで検証が行われないことです。ビューにこの属性を表示すると、検証が完了します。

ここに画像の説明を入力してください

私の質問:隠しフィールドで検証を実行することは可能ですか?回避策はありますか?

隠しフィールドを検証するのは少し奇妙に思えるかもしれません。その理由は、このフィールドが特別なルールに基づいてjQueryから入力されるためです。塗りつぶされていない場合は、ビューで何かが無効であることがわかります。

ありがとう。

4

4 に答える 4

28

考えられる理由はignore: ':hidden'、ファイルに行があることである可能性がありjquery.validate.unobtrusive.jsます。

1.9.0バージョン以降は、デフォルトの動作です。追加することで手動で修正できます

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

あなたがここで見ることができるように

別の変更により、非表示の要素を含むフォームのセットアップが簡単になります。これらはデフォルトで無視されるようになりました(オプション「ignore」には「:hidden」がデフォルトとして含まれるようになりました)。理論的には、これは既存の設定を壊す可能性があります。万が一、実際にそうなる場合は、ignore-optionを「[]」(引用符なしの角かっこ)に設定することで修正できます。

于 2012-04-13T06:46:22.453 に答える
0

コントローラー、および関連するビューのアクションで JavaScript を使用する必要がない場合は、モデルを検証する前にモデル エラーを追加できます。例:

 [HttpPost]
        public ActionResult Fix(YourModel mdl)
    {

    if (mdl.CompanyCityID==0)
        ModelState.AddModelError("", "Your error message!");

    if (ModelState.IsValid)
    {


       //
       //Some code
       //

        return View("YourView", yourlist);
    }

    return View(mdl);
}
于 2016-03-29T05:24:04.123 に答える
0

jquery.validate.js ファイルでこの行をコメントアウトすることもできます。無視: ":hidden"

于 2013-07-26T15:35:38.473 に答える
-1

いつでも@Html.HiddenFor(m => m.CompanyCityID)非表示の div の中に入れて、それを に変更できEditorFor()ます。

CSS

.hidden {
    display: none;
}​

意見

<div class="hidden">
        @Html.EditorFor(m => m.CompanyCityID)
</div
于 2012-04-13T07:04:57.443 に答える