-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 使用的)忽略隐藏字段。您可以通过在页面加载时更改默认设置来调整此设置。一种方法可能是将类添加到隐藏字段以强制对其进行验证。

<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>

更改默认值的 javacript 看起来像这样

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