【问题标题】:Data validation for dependent drop down lists相关下拉列表的数据验证
【发布时间】:2012-08-20 14:36:23
【问题描述】:

我正在寻找解决以下问题的最佳方法:我有一个包含多个下拉列表的表单,这些下拉列表根据之前下拉列表中的选择填充(或未填充)。填充列表后,这些字段将被启用并且是必需的。当列表未填充时,字段被禁用,因此不需要。数据存储在 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));
}

不幸的是,提交表单时这不会验证。我错过了什么吗?

我愿意接受您可能提出的任何其他建议。

【问题讨论】:

  • 如果禁用的字段是[必需]并且您覆盖客户端验证以允许它在提交时为空,您不希望数据库返回错误吗?假设数据库具有与要求相同的字段并且您发送的是 null?
  • @Michael_B 是的,正如预期的那样,当必填字段作为空值发送时,数据库返回错误。正如我所指出的,我正在寻找一种方法来强制对未提供 [Required] 属性的字段进行客户端验证。
  • 您可以使用视图模型并将数据注释放在那里而不是您的域模型上。这样,您的数据库就不会知道 [Required] 过滤器。您的客户端验证将保持不变。然后,您可以使用 ModelState 属性在控制器中执行服务器端检查。
  • @Forty-2 感谢您的建议。现在一切都很好。发布您的回复作为答案,我会批准。

标签: javascript jquery asp.net-mvc-3 validation


【解决方案1】:

每个请求:

您可以使用视图模型并将数据注释放在那里而不是您的域模型上。这样,您的数据库就不会知道 [Required] 过滤器。您的客户端验证将保持不变。然后,您可以使用 ModelState 属性在控制器中执行服务器端检查。

【讨论】:

  • 我通常只检查 ModelState.IsValid 以知道是继续请求还是返回表单并显示错误。为了访问实际值,我使用了输入视图的模型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
相关资源
最近更新 更多