c#.net MVC4用于表示表或表单的模型

时间:2012-12-15 10:48:11

标签: c# asp.net-mvc

你好我对mvc 4中的模型有点困惑,并认为有人可能能指出我正确的方向。非常感谢。

例如,如果我有一个包含以下字段的表

        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 5)]         
        public string UserName { get; set; }

        [Required(ErrorMessage="Email Address is Required")]
        [StringLength(15,  ErrorMessage = "Email Address must be between {0} and {1} in size",MinimumLength = 5 )]
        [DataType(DataType.EmailAddress)]
        [Display(Name="Email")]        
        public string Email { get; set; }

        [MaxLength(25)]
        [Display(Name="Mobile Telephone Number")]    
        public string Mobile {get;set;}

        [MaxLength(500)]    
        [Display(Name="Headline")]
        public string Headline {get;set;}

        [Required]
        [StringLength(200)]
        [Display(Name = "First Name")]
        public string FirstName {get;set;}

        [Required]
        [StringLength(200)]
        [Display(Name="Surname")]
        public string Surname { get; set;}

        public virtual int? DayOfBirthId { get; set; }
        public virtual DayOfBirth DayOfBirth { get; set; }
        public virtual int? MonthOfBirthId { get; set; }
        public virtual MonthOfBirth MonthOfBirth { get; set; }
        public virtual int? YearOfBirthId { get; set; }
        public virtual YearOfBirth YearOfBirth{get;set;}

这是我在数据库中的用户个人资料表。但是,我想要一个用户注册到该网站的表单。当他们第一次注册时,我不需要所有的细节,如电话我真正需要的是用户名,电子邮件地址和密码。我是否为此创建了另一个模型。或者我有一个模型,并在控制器上将字段设置为null或空字符串注册时不需要。我也有验证,所以这将设置为尚未在表单上输入的数据。

我的问题是,如果数据库需要重新设计以满足这一要求,那么所有表格都应该代表模型。或者控制器是否应设置不需要的值。或者是否应该有另一个模型来表示要创建的表格映射到此表。

我对此感到有些困惑,并且对任何人的澄清都会非常感激。

1 个答案:

答案 0 :(得分:2)

看起来您正在将模型直接映射到视图,这很好,但通常会使用ViewModels的概念。

Viewmodels专门针对将使用它们的视图而定制,并且仅包含视图所需的属性。然后映射ViewModels

  1. 用于保留用户的任何更改的模型
  2. 从显示用户持久数据的模型
  3. 您可以手动滚动两个对象之间的映射,或使用AutoMapperEmitMapper等工具。