【发布时间】:2014-06-22 22:28:27
【问题描述】:
我是 MVC 新手,没有找到关于将类型化模型返回到视图的正确方法的示例。我需要创建一个视图以允许经过身份验证的用户编辑他们的一些个人资料。
作为测试,我创建了一个控制器操作,该操作返回一个 ApplicationUser 模型和在表单字段中显示配置文件的视图页面。这可行,但它包含所有用户配置文件,这不是我想要的。为了测试我写了以下内容:
Public ActionResult EditProfile()
{
ApplicationUser user = UserManager.FindById(User.Identity.GetUserId());
return View(user)
}
当然,这确实有效,我意识到我可以在视图中显示我喜欢的任何内容,但我不确定当我只需要允许时将所有用户的个人资料返回到视图是否是最佳做法编辑他们的一些设置。
所以我创建了一个新的 ViewModel,其中只有所需的字段和一个基于该模型的新视图。它有效,但我仍然觉得我做得不好。在控制器操作中,我这样做了:
public ActionResult EditProfile()
{
ApplicationUser user = UserManager.FindById(User.Identity.GetUserId());
EditProfileViewModel model = new EditProfileViewModel();
model.Email = user.Email;
model.Company = user.Company;
model.Name = user.Name;
model.PhoneNumber = user.PhoneNumber;
model.CountryCode = user.CountryCode;
model.StateProvince = user.StateProvince;
model.Language = user.Language;
model.StateProvinceCode = user.StateProvinceCode;
return View(model);
}
这似乎是不必要和可怕的维护。我很抱歉问了这么一个基本的问题。老实说,我在网上搜索了一些例子,我知道它们在那里,但我没有找到我认为适用于我的问题的内容。
顺便说一句,控制器用 [Authorize] 装饰,因此我假设此操作/视图只能由经过身份验证的用户访问。
如果有人可以向我展示一个填充模型并将其传递给控制器的正确方法的示例,我会更好地理解。看来这应该只需要几行代码就可以完成。
【问题讨论】:
-
在接收域模型的视图模型中放置一个构造函数。更容易维护。新的 EditProfileViewModel(user);