asp.net-mvc – ASP.NET MVC – 创建一个新模型或使用Entity框架
我正在开发一个ASP.NET MVC 3应用程序,我首先使用实体??框架代码来创建我的应用程序的类,并且我还有一个存储库以便对其执行操作,保持DBContext和DBEntities的清洁定义.
我的疑问是关于视图的渲染以及保存编辑模型的方式. 如果我有这个实体代表我的数据库中存储的用户: //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; } } 我想显示一个带有FirstName,LastName,Email和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(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(); } 有任何方法可以做这样的控制器,如: public ActionResult UpdateUser(User u) { repository.UpdateUser(u); return View(); } 因为如果我有,我如何添加像ConfirmPassword或CurrentPassword这样的字段,以便对此特定视图进行验证. 解决方法
如果我是你,我不会在我的表示层使用域模型.我会创建一个视图模型(另一个类),它将与我的域模型非常相似.然后我会使用自动映射工具从我的域模型映射到视图模型.
这是一种非常常见的情况,因此如果您使用谷歌“视图和域”模型,您应该找到所需的一切. 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; } } public class UpdateUserViewModel { // Original fields public string Password { get; set; } public string PasswordConfirmation { get; set; } 然后,您可以配置自动映射器以删除锅炉板代码: public ActionResult ShowUser() { var domainModel = new User(); // I'm assuming that properties are set somewhere var viewModel = new UserViewModel(); Autommaper.Map(domainModel,viewModel); return View(viewModel); } 这非常粗糙,但希望你能有所了解. 更新1:**
它不仅更好,它提供了更好的关注点分离,使您的代码易于测试.只需查看类的名称,我就可以看到它的用途UpdateUserViewModel,RegisterUserViewModel等).
原始字段我的意思是: public class UserViewModel{ public string UserName { get; set; } public string FirstName { get; set; } } 这些字段已经在您的User类中,所以我通过不再输入它来节省我的时间.
我相信我所建议的仍然是MVC模式,而不是MVVM.
Automapper是我用过的东西.那里有很少的工具,它们几乎完全相同.尝试一下,找到最适合您需求的产品. 祝好运. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |