我正在寻找解决以下问题的最佳方法:我有一个表单,其中包含许多下拉列表,这些列表根据之前下拉列表中的选择进行填充(或未填充)。填充列表时,将启用并且需要字段。当列表未填充时,字段被禁用,因此不是必需的。数据存储在SQL数据库中。我已将System.ComponentModel.DataAnnotations中的[Required]属性应用于每个字段。这在客户端工作正常,但是当我尝试将模型保存到数据库时,我会为每个禁用的字段收到dbValidationErrors。
理想情况下,我想从依赖项列表中删除[Required]属性,允许我将模型保存到数据库中。然后我只需要一种方法来利用MVC的客户端验证在客户端切换字段的要求。这将在每个必需字段之间保持一致的样式。 This link似乎与我正在寻找的方向相符。这是我的代码:
function enableValidation(id, formId) {
document.getElementById(id).setAttribute('data-val-required', '');
document.getElementById(id).setAttribute('data-val', 'true');
document.getElementById(id).setAttribute('class', 'input-validation-error');
$.validator.unobtrusive.parse($(formId));
}
function disableValidation(id, formId) {
document.getElementById(id).removeAttribute('data-val-required');
document.getElementById(id).removeAttribute('data-val');
document.getElementById(id).removeAttribute('class');
$.validator.unobtrusive.parse($('#'+formId));
}
不幸的是,这不会在提交表单时进行验证。我错过了什么吗?
我对你可能提出的任何其他建议持开放态度。
答案 0 :(得分:0)
按要求:
您可以使用视图模型并将数据注释放在那里而不是域模型上。这样,您的数据库不知道[Required]过滤器。您的客户端验证将保持不变。然后,您可以使用ModelState属性在控制器中执行服务器端检查。