Asp.net mvc 3 在ASP.NET MVC3中,如何使用非常相似但略有不同的视图模型保持干燥?
在构建应用程序时,我们创建了一个通用对象模型来存储一些值,viewmodel目前看起来有点像这样:Asp.net mvc 3 在ASP.NET MVC3中,如何使用非常相似但略有不同的视图模型保持干燥?,asp.net-mvc-3,viewmodel,Asp.net Mvc 3,Viewmodel,在构建应用程序时,我们创建了一个通用对象模型来存储一些值,viewmodel目前看起来有点像这样: public class FooViewModel { public int ID { get; set; } public byte FooType { get; set; } [Required] [Display(Name = "Bar Name")] public string Name { get; set; } [Required]
public class FooViewModel {
public int ID { get; set; }
public byte FooType { get; set; }
[Required]
[Display(Name = "Bar Name")]
public string Name { get; set; }
[Required]
public string Email { get; set; }
//etc, etc
}
问题是:根据FooType,我们希望显示名称不同,类型1和2不需要电子邮件,但类型3和4需要电子邮件
我们尝试将每个类型中不同的属性分离到继承自此类型的类中,但验证确实如此,所以这不起作用
目前,唯一的选择似乎是为每个FooType创建一个viewmodel(以及单独的控制器和视图),这会导致大量代码重复
还有什么其他方法可以保持此状态?您可以实现自定义,也可以实现。您可以实现自定义,也可以实现。为了使验证上下文受益(例如,验证不同上下文中的对象),我强烈建议使用库 为了使验证上下文受益(例如,验证不同上下文中的对象),我强烈建议使用库 我知道IValidateObject不提供不引人注目的验证,所以您只能在服务器上进行验证,不是吗?我相信您是正确的。FluentValidation可能是一个更好的选择。我还没有使用过它,但我听说过关于它的很好的东西。这个答案解决了IValidatableObject缺乏客户端验证的问题。我知道IValidateObject没有附带不引人注目的验证,所以你只能在服务器上进行验证,不是吗?我相信你是正确的。FluentValidation可能是一个更好的选择。我还没有用过它,但我听说过关于它的很好的东西。这个答案解决了使用IValidatableObject缺乏客户端验证的问题。我担心这确实是一条路要走。它不像默认的验证框架那样性感和方便,但所有迹象都开始指向这个库。FluentValidation推荐+1。事实上,我发现它比微软的数据注释解决方案更“性感”,因为它允许您将视图表示和验证的关注点分开(允许您在不同的上下文中验证相同的视图模型)。我担心这确实是一种方法。它不像默认的验证框架那样性感和方便,但所有迹象都开始指向这个库。FluentValidation推荐+1。事实上,我发现它比微软的数据注释解决方案更“性感”,因为它允许您将视图表示和验证的关注点分开(允许您在不同的上下文中验证相同的视图模型)。