将用户对象传递给视图不起作用

时间:2016-07-02 17:34:43

标签: c# entity-framework visual-studio

将用户对象传递给我的视图时,我似乎无法访问其配置文件属性。在我看来,它在我的文本框中显示了一个空值。

型号:

...
public ApplicationUser user { get; set; }
...

控制器:

public async Task<ActionResult> EditProfile()
    {
        EditProfileViewModel model = new EditProfileViewModel();
        var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
        var currentUser = await store.FindByIdAsync(User.Identity.GetUserId());

        model.user = currentUser;

        return View(model);
    }

查看:

...
@Html.TextBoxFor(m => m.FirstName, new { @value = Model.user.FirstName, @class = "form-control" })
...

我可以通过简单地在我的控制器中设置属性并将这些属性传递给我的视图来解决问题,但如果我有大量属性,那么我需要在控制器中编写更多代码。

控制器示例: (假设我的模型正确)

public async Task<ActionResult> EditProfile()
    {
        EditProfileViewModel model = new EditProfileViewModel();
        var store = new UserStore<ApplicationUser>(new ApplicationDbContext());
        var currentUser = await store.FindByIdAsync(User.Identity.GetUserId());

        model.FirstName = currentUser.FirstName;
        model.LastNameName = currentUser.LastName;
        model.StreetName = currentUser.StreetName;
        ...

        return View(model);
    }

另一个解决方案是直接从视图中访问currentUser,但我更喜欢让我的视图尽可能干净。

示例视图:

@{
   var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));
   var currentUser = manager.FindById(User.Identity.GetUserId());
}

所以我的问题是: 如何传递用户对象并从我的视图中访问它,就像我在问题的顶部显示的那样,特别是'@value'部分?或者有更好的解决方案吗?

0 个答案:

没有答案