EditorTemplate 的嵌套模型的 ASP.NET MVC3 条件验证

2024-05-19

假设你有一个 viewModel:

public class CreatePersonViewModel
{
    [Required]
    public bool HasDeliveryAddress {get;set;}

    // Should only be validated when HasDeliveryAddress is true
    [RequiredIf("HasDeliveryAddress", true)]
    public Address Address { get; set; }
}

还有型号Address看起来像这样:

public class Address : IValidatableObject
{
    [Required]
    public string City { get; set; }
    [Required]        
    public string HouseNr { get; set; }
    [Required]
    public string CountryCode { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string ZipCode { get; set; }
    [Required]
    public string Street { get; set; }

    #region IValidatableObject Members

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        string[] requiredFields;
        var results = new List<ValidationResult>();

        // some custom validations here (I removed them to keep it simple)

        return results;
    }

    #endregion
}

有些人建议为 Address 创建一个视图模型并在其中添加一些自定义逻辑,但我需要一个实例Address传递到我的 EditorTemplate 的地址。

这里的主要问题是地址的验证是在我的 PersonViewModel 的验证之前完成的,所以我无法阻止它。

注意:RequiredIfAttribute 是一个自定义属性,它正好满足我对简单类型的需求。


如果你使用过的话,那就小菜一碟了FluentValidation.NET http://fluentvalidation.codeplex.com/而不是 DataAnnotations 或 IValidatableObject 在复杂场景中相当限制验证能力:

public class CreatePersonViewModelValidator : AbstractValidator<CreatePersonViewModel>
{
    public CreatePersonViewModelValidator()
    {
        RuleFor(x => x.Address)
            .SetValidator(new AddressValidator())
            .When(x => x.HasDeliveryAddress);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EditorTemplate 的嵌套模型的 ASP.NET MVC3 条件验证 的相关文章

  • 在 Django 视图中访问其他项目中的模型导致“表不存在”错误

    基地项目结构 baseproject baseapp models py class BaseModel models Model 其他项目结构 project app views py urls py 项目 app views py im
  • 将 ActiveAdmin 用户与现有用户模型合并

    我在项目早期就设置了 ActiveAdmin 并使用了默认值admin users认证模型 从那以后 我使用 Devise 建立了一个单独的用户模型 并意识到合并两个表可能会更明智 这样管理员就可以在 Activeadmin 和站点前端中进
  • 发布到列表 MVC3

    我试图让我的视图将列表发布回操作 但它始终为空 所以我的模型有一个 WeightEntry 对象列表 运动模型 public class Exercise public List
  • 如何删除django中级联的一对一相关模型?

    背景 我在 Django 1 8 5 中定义了以下模型 class PublishInfo models Model pass class Book models Model info models OneToOneField Publis
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • Razor mvc3 + jquery + Url 操作 + 部分视图

    我有一个关于 jQuery Razor 的问题 我想使用 razor 和 Url Action 构建一个 javascript 变量 并且 html 属性将是输入的值 像这样 var d1 d1 val var d2 d2 val var
  • 多步ActiveRecord的模型验证

    考虑具有以下字段的用户模型 名字 必填 姓氏 必填 电子邮件 必填 要求输入密码 电话 必填 大小 10 位数字 地址 必填 以及包含以下步骤的多步骤注册表单 第一步 包含 名字 姓氏 和 电子邮件 字段 第二步输入密码 电话和地址 您将如
  • 如何在没有 EF 的 ASP.NET MVC 中使用普通 sql?

    我有一个使用 linq to sql 的类 如何在 ASP NET MVC 3 中使用普通 sql 而不使用 EF 来实现相同的功能 public ActionResult Index var List from c in db OFFIC
  • 为什么这个 XHTML 表单无法验证?

    任何想法为什么这不会在这里验证 http validator w3 org validate by input http validator w3 org validate by input 表单输入标签似乎是错误的 但通读 XHTML 规
  • MVC ASP.NET 或 Razor

    我对 MVC 很陌生 我对 Silver light WPF 和 MVVM 有相当多的了解 但对 MVC 知之甚少 我正在按照 Microsoft 网站上的主要教程进行操作http www asp net mvc tutorials get
  • 使用 MVC 3 中的 Razor View 引擎从部分视图渲染部分

    我在底部主布局中渲染了一个部分 这通常是在页面渲染时在页面底部渲染 javascript 的部分 在 View 和 partial 视图中定义该部分 页面呈现时 它会从页面视图呈现部分 但不会从 partial 视图呈现部分 如何将 par
  • Rails validates_与模型的错误消息相关

    我在模型中使用 validates linked 来使用其他模型的验证代码 问题是验证失败的消息是 is invalid 我想将模型验证失败的实际描述错误冒泡到顶部 我发现这个问题 验证与模型的错误消息关联 https stackoverf
  • ASP.NET MVC 防伪造令牌不安全

    在没有 ssl 的情况下向服务器发出请求时 我实际上可以看到 MVC3 框架以纯文本形式生成的验证令牌密钥 该密钥存储在名为 RequestVerificationToken Lw 的 cookie 中 在混合安全环境中 实际上可以在向非
  • ActiveRecord 布尔验证接受非布尔值

    我正在尝试验证属性是否为布尔值 即 true 或 false 从我期望的 Rails 指南中 validates new out of stock inclusion in true false 可以工作 但它接受非布尔值 例如 Hi 作为
  • ASP.NET MVC3:packages.config 的用途是什么?

    asp net MVC packages config 的用途是什么 我是否需要其中的项目来反映站点 应用程序中使用的内容 该文件由 NuGet 基础结构管理 它用于跟踪已安装的软件包及其各自的版本 如果您安装了 ASP NET MVC 3
  • Angular 5 表单验证(必需)不起作用

    我正在使用 TypeScript 学习 Angular 5 我对此完全陌生 我现在正在尝试构建一个表单并验证它 但它无法正常工作 这是我的组件 Component selector app login templateUrl login c
  • laravel 5.4 在请求验证之前修改数据[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我有我的自定义请求 它扩展了 Backpack CrudController 现在我想重写 ValidatesWhenResolv
  • 如何让 Laravel“确认”验证器将错误添加到确认字段?

    默认情况下 Laravel 确认 验证器将错误消息添加到原始字段 而不是通常包含确认值的字段 password gt required confirmed min 8 是否有任何简单的方法来扩展验证器或使用一些技巧来强制它始终在确认字段而不
  • DropDownListFor 具有带有 - 属性名称的自定义属性?

    问题 我需要创建一个像这样的下拉列表
  • 您如何填充/验证您的 ViewModel?

    我很好奇人们构建 ViewModel 的各种方式以及他们为什么选择该方法 我在这里可以想到几种方法 1 注入存储库 控制器加载模型并映射到 ViewModel 这里 ViewModel 构造函数可以采用各种集合来进行内部设置 在选择列表中

随机推荐