允许用户在MVC中编辑自定义帐户设置

时间:2014-08-09 14:21:38

标签: c# asp.net asp.net-mvc asp.net-mvc-4 account-management

从简单的MVC项目模板中,我扩展了ApplicationUser.cs以显示名为DisplayName的新用户帐户设置(人们将在聊天应用程序中使用的显示名称作为网站):

public string DisplayName { get; set; }

我修改了简单的MVC项目模板,以便我可以注册一个新帐户并指定DisplayName,我甚至可以在我的数据库中看到它,所以一切都很好(该过程描述为here )。无论如何,问题我现在面临的是我想允许用户更改此设置,因此我扩展了帐户管理页面以显示带有显示此设置的文本字段的HTML部分页面。当他们发布此部分页面时,会调用此操作:

// POST: /Account/Manage
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ManagePublicSettings(ManagePublicSettingsViewModel model)
{
    ViewBag.ReturnUrl = Url.Action("Manage");
    if (ModelState.IsValid)
    {
        IdentityResult result = await UserManager.ChangeDisplayName(User.Identity.GetUserId(), model.DisplayName);
        if (result.Succeeded)
        {
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            return RedirectToAction("Manage", new { Message = ManageMessageId.ChangeAccountSettingsSuccess });
        }
        else
        {
            AddErrors(result);
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

ChangeDisplayName(通过此方法调用)应该是什么样的?这是扩展MVC帐户管理门户的正确方法吗?我应该像这样扩展ApplicationUserManager类吗?我对MVC很新,只是想把它弄好。

1 个答案:

答案 0 :(得分:2)

不,你不应该像那样扩展UserManager。这真的很简单。你有这个代码:

var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

只需设置用户的DisplayName属性并更新它们:

user.DisplayName = Model.DisplayName;
await UserManager.UpdateAsync(user);