Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 在ASP.NET MVC3中,如何使用非常相似但略有不同的视图模型保持干燥?_Asp.net Mvc 3_Viewmodel - Fatal编程技术网

Asp.net mvc 3 在ASP.NET MVC3中,如何使用非常相似但略有不同的视图模型保持干燥?

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]

在构建应用程序时,我们创建了一个通用对象模型来存储一些值,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 string Email { get; set; }

    //etc, etc
}
问题是:根据FooType,我们希望显示名称不同,类型1和2不需要电子邮件,但类型3和4需要电子邮件

我们尝试将每个类型中不同的属性分离到继承自此类型的类中,但验证确实如此,所以这不起作用

目前,唯一的选择似乎是为每个FooType创建一个viewmodel(以及单独的控制器和视图),这会导致大量代码重复


还有什么其他方法可以保持此状态?

您可以实现自定义,也可以实现。

您可以实现自定义,也可以实现。

为了使验证上下文受益(例如,验证不同上下文中的对象),我强烈建议使用库

为了使验证上下文受益(例如,验证不同上下文中的对象),我强烈建议使用库

我知道IValidateObject不提供不引人注目的验证,所以您只能在服务器上进行验证,不是吗?我相信您是正确的。FluentValidation可能是一个更好的选择。我还没有使用过它,但我听说过关于它的很好的东西。这个答案解决了IValidatableObject缺乏客户端验证的问题。我知道IValidateObject没有附带不引人注目的验证,所以你只能在服务器上进行验证,不是吗?我相信你是正确的。FluentValidation可能是一个更好的选择。我还没有用过它,但我听说过关于它的很好的东西。这个答案解决了使用IValidatableObject缺乏客户端验证的问题。我担心这确实是一条路要走。它不像默认的验证框架那样性感和方便,但所有迹象都开始指向这个库。FluentValidation推荐+1。事实上,我发现它比微软的数据注释解决方案更“性感”,因为它允许您将视图表示和验证的关注点分开(允许您在不同的上下文中验证相同的视图模型)。我担心这确实是一种方法。它不像默认的验证框架那样性感和方便,但所有迹象都开始指向这个库。FluentValidation推荐+1。事实上,我发现它比微软的数据注释解决方案更“性感”,因为它允许您将视图表示和验证的关注点分开(允许您在不同的上下文中验证相同的视图模型)。