ASP.Net 验证未针对隐藏字段触发

ASP.Net validation not fireing for hidden fileds

我的页面上有 3 个必填字段,其中 2 个被隐藏。根据下拉列表的选择,隐藏字段值由 jQuery 填充。如果我只是将所有内容留空,以便 none 字段全部填写并点击提交按钮,则 @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; }

默认情况下 jQuery 验证(这是 MVC 使用的)忽略隐藏字段。您可以通过在页面加载时更改默认设置来调整它。一种方法可能是向隐藏字段添加 class 以强制对它们进行验证。

<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)"
});