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 doesnt 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是我用过的东西.那里有很少的工具,它们几乎完全相同.尝试一下,找到最适合您需求的产品. 祝好运. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 2 – ViewModel前缀
- asp.net-mvc – 如何检查用户是否在Action中被授权
- asp.net – 如何将最新的TFS变更集编号插入到aspx页面?
- asp.net – 在IIS上运行Python和Django
- asp.net-mvc – 在ascx文件中使用Html.RenderPartial()
- Asp.net中的下拉列表验证使用必需字段验证器
- 我可以使用MiniProfiler来检测ASP.NET MVC WebApi网站吗?
- asp.net – 在.net应用程序中使用jquery禁用回发上的按钮
- 在ASP.NET页面上显示XML
- asp.net-core – 带有JSONP的ASP.NET Core MVC
- asp.net-mvc – ASP.net MVC 3教程推荐
- asp.net下经典数据库记录分页代码
- asp.net-mvc – Sql Views的流畅Nhibernate映射
- asp.net – File.Exists从网络共享返回false
- asp.net-mvc – MVC,不再“假设”使用HttpContex
- asp.net-mvc – 从Asp.net MVC发送HTML电子邮件的
- ASP.NET工作进程仍然以31kb的大小返回数据
- webforms – ASP.NET Web窗体(4.5)强类型模型绑定
- asp.net – ASMX服务在开发服务器上工作,部署到I
- 在ASP.NET上启动维护流程的最佳实践是什么
