我是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);
}
这似乎是不必要的,也很难维护。我很抱歉提出这样一个基本问题。我诚实地搜索了网络的例子,我知道他们在那里,但我没有找到我认为适用于我的问题。
顺便说一下,控制器是用[授权]修饰的,所以我假设这个动作/视图只能由经过身份验证的用户访问。
如果有人能够向我展示一个填充模型并将其传递给控制器的正确方法的示例,我会更好地理解。似乎这应该只需要几行代码即可完成。
答案 0 :(得分:2)
嗯,首先没有什么可担心的,因为一切都在服务器端处理。如果你想创建自定义模型,它似乎超载,因为你现在必须再做2次交易
[HttpPost]
操作中,您必须获取原始模型数据并覆盖自定义模型中新更新的字段。如果您使用原始模型更好,只需在视图中选择必要的字段,然后在[HttpPost]
操作中,您需要获取原始记录并从视图中替换字段。