3

您好,我对 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 或空字符串,这在注册时不需要。我也进行了验证,因此将为尚未在表单中输入的数据设置此设置。

我的问题最终是所有形式都应该代表模型——是否应该重新设计数据库以满足这一要求。或者控制器应该设置不需要的值。或者是否应该有另一个模型来表示要创建的映射到该表的表单。

我对此有点困惑,任何人的澄清将不胜感激。

4

1 回答 1

2

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

Viewmodels专门针对将要在其中使用的视图进行定制,并且仅包含视图所需的属性。然后映射 ViewModel

  1. 用于持久保存来自用户的任何更改的模型
  2. 来自用于显示用户持久数据的模型

您可以手动滚动两个对象之间的映射,或使用AutoMapperEmitMapper 之类的工具。

于 2012-12-15T10:57:35.570 回答