【问题标题】:Make a field not [Required] in certain situations?在某些情况下使字段不是[必需]?
【发布时间】:2018-03-14 18:43:52
【问题描述】:

我有一个包含以下属性的模型:

[Required]
public string City { get; set; }

基本上,用户从下拉列表中选择存储的值。我的部分视图中的字段填充了相应的数据。在某些情况下,存储的数据对于 City 没有价值。我正在尝试使用 jQuery 检查该字段是否为空,基本上不需要该字段并允许提交。我尝试了以下方法:

$("#City").attr("data-val", "false");
$("#City").rules("remove", "required");
$("#City").attr("disabled", "disabled");
$("#City").attr("aria-required", "false");
$("#City").removeAttr("required");

这些都不起作用。提交时,在控制器中使用 ModelState.IsValid 为 false 和错误声明“需要 City 字段”的正确方法。

如何使用 jQuery 来防止该字段在提交时被验证?

【问题讨论】:

  • 这与 jQuery 无关(或者至少 jQuery 部分——$("#City").removeAttr("required");——是正确的)。这是一个 ASP.Net MVC 的东西。在客户端删除它并不会告诉 服务器 它不再需要。
  • 看看thisthis..
  • 感谢您的建议,感谢 T.J 指出这是服务器端验证。我仍在学习验证,并且由于页面的响应方式,我确信这是在客户端发生的。我将首先重新评估该属性是否需要 [Required] 属性。
  • 如果 city 没有值,为什么不检查你的控制器,如果是,在检查模型状态是否有效之前将其设置为空字符串。
  • 使用foolproof 或类似的[RequiredIf] 条件验证属性,以便您获得客户端和服务器端验证。另请参阅The Complete Guide To Validation In ASP.NET MVC 3 - Part 2

标签: asp.net-mvc html validation


【解决方案1】:

在检查ModelState.IsValid 是否存在之前,您可以删除模型ModelState["City"].Errors.Clear(); 的该属性上的错误,因此意味着无论您的City 属性发生什么错误,模型状态都是有效的。

注意,这个修复应该应用在服务器上的控制器中 - 它与 jQuery 无关。

【讨论】:

  • 这是一个坏主意,因为它打破了模型应该做什么和控制器做什么的分离。一个更好的解决方案是从属性中删除所需的属性并将 IValidateObject 实现到您的视图模型。在您的实施中,您可以检查您的业务规则并发出错误。这也可以无缝地工作 mvc 模型绑定,因此您不必破解 ModelState 错误。
  • @Fran 我同意。那肯定是更好的做法。我的答案只是让 O.P. 通过 Model.IsValid
  • 感谢您的建议。我想我会重新评估这些属性是否真的需要设置为 [Required],因为在某些情况下它们不会被填充。
【解决方案2】:

尽管发帖人提出了一些很好的建议,但我最终重新评估了我们的需求,发现该特定属性不需要Required 属性。

感谢大家的建议。

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2015-05-02
    相关资源
    最近更新 更多