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;}

これは、データベース内の私のユーザー プロファイル テーブルです。ただし、ユーザーがサイトに登録するフォームが必要です。彼らが最初に登録するとき、電話などのすべての詳細は必要ありません。本当に必要なのは、ユーザー名、電子メールアドレス、パスワードだけです。このために別のモデルを作成しますか。または、モデルが1つあり、コントローラーでフィールドをnullまたは登録時に必要のない空の文字列に設定しますか? 検証も行っているので、フォームに入力されていないデータに対して設定されます。

私の質問は、最終的にはすべてのフォームがモデルを表す必要があるということです。これに対応するためにデータベースを再設計する必要があります。または、コントローラーが不要な値を設定する必要があります。または、このテーブルにマップされるフォームを表す別のモデルが作成される必要があります。

私はこれについて少し混乱しています。誰かの説明をいただければ幸いです。

4

1 に答える 1

2

モデルをビューに直接マッピングしているように見えますが、これは問題ありませんが、多くの場合、ViewModelsの概念がこれに使用されます。

ビューモデルは、使用されるビューに合わせて特別に調整されており、ビューに必要なプロパティのみが含まれています。その後、ViewModel がマップされます

  1. ユーザーからの変更を永続化するためのモデルへ
  2. ユーザーの永続データを表示するためのモデルから

2 つのオブジェクト間のマッピングを手動でロールするか、AutoMapperEmitMapperなどのツールを使用できます。

于 2012-12-15T10:57:35.570 に答える