私はASP.NET MVC 3アプリケーションを開発しています。私は、アプリケーションのクラスを作成するためにまずエンティティフレームワークコードを使用しています。 DBContextおよびDBEntities定義をクリーンに保ち、その上で操作を実行するためのリポジトリ。ASP.NET MVC - 新しいモデルを作成するか、Entityフレームワーククラスを使用します
疑問は、ビューのレンダリングと、編集モデルが保存される方法です。
私はDBに保存されているユーザーを表すこの実体がある場合:
//Entity:
public class User
{
[Key]
public int IdUser { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}
を、私はさせるためには、姓、姓、電子メールやNEWPASSWORD、ConfirmPaswordとCurrentPasswordとビューを表示したいですユーザーは自分のデータを変更し、CurrentPasswordを入力して変更を確認します。私の疑問は、ConfirmPaswordやCurrentPasswordのようなものが私のエンティティにはありませんので、私はこのViewの新しいモデルを作成し、私の新しいモデルを私のデータベースエンティティに保存するには?同様に:
public class UpdateUserModel
{
[Required]
[Display(Name = "Name")]
public string FirstName{ get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName{ get; set; }
[Required]
[DataType(DataType.EmailAddress)]
[Display(Name = "Not valid email")]
public string Email { get; set; }
[DataType(DataType.Password)]
[Display(Name = "New password")]
public string NewPasword{ get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm the New Pasword")]
[Compare("NewPasword", ErrorMessage = "Password doesn´t mach.")]
public string ConfirmPasword{ get; set; }
[Required(ErrorMessage = "Need to specify the current password to save changes")]
[DataType(DataType.Password)]
[Display(Name = "Current Password")]
public string CurrentPassword { get; set; }
}
と私が作ったコントローラで:
public ActionResult UpdateUser(User u)
{
repository.UpdateUser(u);
return View();
}
私が持っているので、場合に、どのようにi:
public ActionResult UpdateUser(UpdateUserModel model)
{
User u = (User)Membership.GetUser();
u.FirstName = model.FirstName;
u.LastName = model.LastName;
u.Email = model.Email;
if (!String.IsNullOrEmpty(model.NewPassword))
{
u.Password = FormsAuthentication.HashPasswordForStoringInConfigFile(model.NewPassword.Trim(), "md5");
}
repository.UpdateUser(u);
return View();
}
のようなコントローラを持つこれを行うのいずれかの方法があります。この特定のビューの検証を行うために、ConfirmPasswordまたはCurrentPasswordのようなフィールドを追加できます。
さて、私はそれを得る。私が理解したように、各ビューの新しいモデルを作成し、それをエンティティにマップする方が良いと思います。このクラスの元のフィールドは、検証付きのメタデータであるはずです。これは私のモデルをMVCからMVVMに変更するか、beacuseではないですか?私はまだコントローラを持っていますか? Automaperについては、https://github.com/AutoMapper/AutoMapperを使用していますか? – juan25d
更新1を参照してください –
検証とメタデータはどこに書き込むべきですか? UserViewModelクラスではありませんか? – juan25d