【问题标题】:Conditional Validation of ViewModelsViewModel 的条件验证
【发布时间】:2019-08-09 09:25:43
【问题描述】:

我有一个 ViewModel 用于包含两个单独的 ViewModel 的向导,这些 ViewModel 用于将部分视图加载到向导中。根据在 Step1 上选择的选项,我需要验证 Step2 或 Step3。 Step2 和 3 的视图模型有自己的 AbstractValidator,因为它包含客户端验证,所以效果很好。问题是,如果我使用 ModelState.IsValid,其中一个 VM 总是无法验证,因为它是空的(未填写该步骤)。有没有办法跳过对其中一个视图模型的验证?

【问题讨论】:

    标签: asp.net validation model-view-controller unobtrusive-validation


    【解决方案1】:

    假设你有以下模型:

    public class PersonViewModel
    {
        [Required]
        public string Email { get; set; }
    
        [Required]
        public string Password { get; set; }
    
        [Required]
        public string FullName { get; set; }
    }
    

    但是您想从模型验证中排除 FullName,因为您也在未填写 FullName 的地方使用模型,您可以通过以下方式进行:

    ModelState.Remove("FullName");
    

    希望能帮到你,我的朋友 :))

    【讨论】:

    • 谢谢。那种工作,但我的两个 ViewModel 都很长,我也不能用它来进行客户端验证。理想情况下,我希望验证器只检查容器元素内的控件,但如果不编写大量自定义代码,我看不到任何方法。
    • @Echilon:嗨,我的朋友。这个解决方案不是最好的,但我认为它太容易应用了:D
    【解决方案2】:

    我最终得出的解决方案非常简单,但我没有在文档中发现它。您可以调用$('#somecontainer').valid(),它将显示受支持控件的验证消息,如果容器中的所有控件都有效,则还返回true。它不适用于所有规则,因为客户端不支持 GreaterThan 之类的规则。

    【讨论】:

      猜你喜欢
      • 2013-03-17
      • 2012-01-09
      • 1970-01-01
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 2011-02-25
      • 2010-11-11
      • 1970-01-01
      相关资源
      最近更新 更多