-1

ページに 3 つの必須フィールドがあり、そのうちの 2 つが非表示になっています。非表示フィールドの値は、ドロップダウン リストの選択に基づいて jQuery によって入力されます。すべてを空白のままにして、どのフィールドも入力されないようにして送信ボタンを押す@Html.ValidationSummery()と、1 つの表示フィールドのエラーのみがリストされます。非表示フィールドにも値がない場合にエラーを表示するにはどうすればよいですか?

私の非表示フィールドのコード:

<li>
    <label for="SelectedProjects">Selected Projects:</label>
    <select size="1" id="SelectedProjects" name="SelectedProjects" multiple="multiple"></select> <button class="removeButton" data-codetype="Project" type="button">-</button>
    @Html.EditorFor(m => m.SelectedProjectCodes)
</li>

<li>
    <label for="SelectedTasks">Selected Tasks:</label>
    <select size="1" multiple="multiple" id="SelectedTasks" name="SelectedTasks"></select> <button class="removeButton" data-codetype="Task" type="button">-</button>
    @Html.EditorFor(m => m.SelectedTaskCodes)
</li>

レンダリングされた HTML:

        <li>
            <label for="SelectedProjects">Selected Projects:</label>
            <select size="1" id="SelectedProjects" name="SelectedProjects" multiple="multiple"></select> <button class="removeButton" data-codetype="Project" type="button">-</button>
            <input data-val="true" data-val-required="The SelectedProjectCodes field is required." id="SelectedProjectCodes" name="SelectedProjectCodes" type="hidden" value="" />
        </li>

        <li>
            <label for="SelectedTasks">Selected Tasks:</label>
            <select size="1" multiple="multiple" id="SelectedTasks" name="SelectedTasks"></select> <button class="removeButton" data-codetype="Task" type="button">-</button>
            <input data-val="true" data-val-required="The SelectedTaskCodes field is required." id="SelectedTaskCodes" name="SelectedTaskCodes" type="hidden" value="" />
        </li>

それを支える ViewModel のプロパティ:

[HiddenInput(DisplayValue = false), Required]
public string SelectedProjectCodes { get; set; }

[HiddenInput(DisplayValue = false), Required]
public string SelectedTaskCodes { get; set; }
4

1 に答える 1

1

デフォルトでは、jQuery 検証 (MVC が使用するもの) は隠しフィールドを無視します。これは、ページの読み込み時にデフォルト設定を変更することで調整できます。1 つの方法として、非表示フィールドにクラスを追加して、それらを強制的に検証することが考えられます。

<li>
    <label for="SelectedProjects">Selected Projects:</label>
    <select size="1" id="SelectedProjects" name="SelectedProjects" multiple="multiple"></select> <button class="removeButton" data-codetype="Project" type="button">-</button>
    <input class="force-validation" data-val="true" data-val-required="The SelectedProjectCodes field is required." id="SelectedProjectCodes" name="SelectedProjectCodes" type="hidden" value=""/>
</li>

デフォルトを変更するjavascriptは次のようになります

jQuery.validator.setDefaults({
    ignore: ":hidden:not(.force-validation)"
});
于 2016-06-16T16:39:48.220 に答える