Asp.net mvc 从单个模型派生的多个MVC视图模型

Asp.net mvc 从单个模型派生的多个MVC视图模型,asp.net-mvc,viewmodel,Asp.net Mvc,Viewmodel,我不清楚从单个模型派生多个视图模型的最佳方法 该模型目前具有数据注释,但我们喜欢视图模型作为抽象层的灵活性,并且还提供了根据视图需要使用具有不同注释的模型属性的灵活性 我见过使用MetadataType属性声明基本模型以指向具有数据注释的视图模型,但当我们需要1:M(1模型:M视图模型)时,这会强制使用1:1关系 我们目前不使用映射器,将映射器放在一边,手动实现视图模型(包括表示单个模型的数据注释)的最佳方法是什么。也许让viewmodel从model类派生,删除模型数据注释,然后在视图模型中创

我不清楚从单个模型派生多个视图模型的最佳方法

该模型目前具有数据注释,但我们喜欢视图模型作为抽象层的灵活性,并且还提供了根据视图需要使用具有不同注释的模型属性的灵活性

我见过使用MetadataType属性声明基本模型以指向具有数据注释的视图模型,但当我们需要1:M(1模型:M视图模型)时,这会强制使用1:1关系

我们目前不使用映射器,将映射器放在一边,手动实现视图模型(包括表示单个模型的数据注释)的最佳方法是什么。也许让viewmodel从model类派生,删除模型数据注释,然后在视图模型中创建镜像模型的属性(但不能与阴影模型属性的名称相同?),并在视图模型属性上创建视图指定的数据注释,例如

    [DisplayName("Version Number")]
    [StringLength(30)]
    public double VMVersionNumber
    {
        get {
            return VersionNumber; // VersionNumber is model property
        }
        set {
            value = VersionNumber;   
        }
    }

谢谢

写作难道不比继承更有效吗

public class ModelUser
{
  [StringLength(30)]
  public string FirstName { get; set; }

  [StringLength(30)]
  public string LastName { get; set; }
}

public class ViewModelForSomeView
{
   public ModelUser MyUser { get; set; } 
   public string OtherPropertyNecessaryForThisView { get; set; }
   public string AnotherPropertyNecessaryForThisView { get; set; }
}

组合难道不比继承更有效吗

public class ModelUser
{
  [StringLength(30)]
  public string FirstName { get; set; }

  [StringLength(30)]
  public string LastName { get; set; }
}

public class ViewModelForSomeView
{
   public ModelUser MyUser { get; set; } 
   public string OtherPropertyNecessaryForThisView { get; set; }
   public string AnotherPropertyNecessaryForThisView { get; set; }
}

类型
用户
的定义在哪里?这是否违背了ViewModel的目的,因为(我猜您的意思是将属性设置为
ModelUser
object)这根本不会定制模型类。抱歉,编辑了一些代码以澄清。。。模型的目标是为业务对象建模。viewmodel的目标是将某个页面的每一段数据收集到一个对象中。这很容易用作文来完成。您正在尝试将viewmodels用于其他用途吗?合成是我现在用于viewmodels的方法,但这与模型紧密相连,因为如果我在模型上添加数据注释(如必需),则使用合成viewmodel的每个视图都必须按需处理该字段。最好在viewmodel上添加大多数数据注释,因为数据的使用将根据视图要求而有所不同。继承在我的视图中是松散耦合的,它允许根据视图需要以不同的方式使用相同的数据。我不明白为什么这是一个问题:如果(例如)需要用户的名字,那么它总是需要的。在不需要的情况下会出现什么情况?如果你很好地分离了你的模型,你就不会有这个问题……顺便说一句,按定义继承比按组合继承更紧密地耦合在一起……类型
User
的定义在哪里?这是否违背了ViewModel的目的,因为(我猜您的意思是将属性设置为
ModelUser
object)这根本不会定制模型类。抱歉,编辑了一些代码以澄清。。。模型的目标是为业务对象建模。viewmodel的目标是将某个页面的每一段数据收集到一个对象中。这很容易用作文来完成。您正在尝试将viewmodels用于其他用途吗?合成是我现在用于viewmodels的方法,但这与模型紧密相连,因为如果我在模型上添加数据注释(如必需),则使用合成viewmodel的每个视图都必须按需处理该字段。最好在viewmodel上添加大多数数据注释,因为数据的使用将根据视图要求而有所不同。继承在我的视图中是松散耦合的,它允许根据视图需要以不同的方式使用相同的数据。我不明白为什么这是一个问题:如果(例如)需要用户的名字,那么它总是需要的。在不需要的情况下会出现什么情况?如果你很好地分离了你的模型,你就不会有这个问题…顺便说一句,按定义继承比组合更紧密地耦合。。。