2014-06-22 52 views
0

我是MVC的新手,没有找到将类型模型返回到视图的正确方法的示例。我需要创建一个视图,以允许经过身份验证的用户编辑他们的一些配置文件。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

将视图模型中的构造函数放入接收域模型。更容易维护。新的EditProfileViewModel(用户); – gnome

回答

2

那么,首先没有什么可担心的,因为一切都在服务器端处理。如果你想创建自定义模型,它看起来过载,因为你现在必须做更多的事务

  1. 将数据从原始模型复制到自定义模型。
  2. [HttpPost]操作中,您必须获取原始模型数据并覆盖来自定制模型的新更新字段。

如果您使用原始模型,只需在视图和[HttpPost]动作中获取原始记录并替换从视图中获取的字段,则更好。

+0

你说我的第一种方法是可以接受的(将用户返回到视图),我唯一需要担心的是向用户显示必要的字段?我绝对喜欢这样,这将更容易维护。我只是不认为这是正确的做法。学习曲线...:S – rwkiii

+0

是的,但是如果你做了那个客户端,在这种情况下使用ajax你需要使用自定义模型。但这里很好 –

+0

哦,这大大简化了事情和我的理解。难怪我没有找到如何完成我的第二种方法的例子。谢谢拉什敏。 – rwkiii

相关问题