Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 允许用户在MVC中编辑自定义帐户设置_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Account Management - Fatal编程技术网

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

C# 允许用户在MVC中编辑自定义帐户设置,c#,asp.net,asp.net-mvc,asp.net-mvc-4,account-management,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Account Management,从基本的MVC项目模板中,我扩展了ApplicationUser.cs,以显示名为DisplayName的新用户帐户设置(这是一个显示名称,人们将在聊天应用程序中作为站点的一部分使用): 我已经修改了裸体MVC项目模板,这样我就可以注册一个新帐户并指定DisplayName,甚至可以在数据库中看到它,所以一切都很好(过程已经描述)。无论如何,我现在面临的问题是,我想允许用户更改此设置,因此我扩展了帐户管理页面,以显示一个HTML部分页面,其中包含一个显示此设置的文本字段。当他们发布此部分页面时,

从基本的MVC项目模板中,我扩展了
ApplicationUser.cs
,以显示名为
DisplayName
的新用户帐户设置(这是一个显示名称,人们将在聊天应用程序中作为站点的一部分使用):

我已经修改了裸体MVC项目模板,这样我就可以注册一个新帐户并指定DisplayName,甚至可以在数据库中看到它,所以一切都很好(过程已经描述)。无论如何,我现在面临的问题是,我想允许用户更改此设置,因此我扩展了帐户管理页面,以显示一个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);
}
//发布:/Account/Manage
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务ManagePublicSettings(ManagePublicSettingsViewModel模型)
{
ViewBag.ReturnUrl=Url.Action(“管理”);
if(ModelState.IsValid)
{
IdentityResult结果=等待UserManager.ChangeDisplayName(User.Identity.GetUserId(),model.DisplayName);
if(result.successed)
{
var user=await UserManager.FindByIdAsync(user.Identity.GetUserId());
返回RedirectToAction(“Manage”,new{Message=ManageMessageId.changeCountSettingsAccess});
}
其他的
{
加法器(结果);
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}

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

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

var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
只需设置用户的DisplayName属性并进行更新:

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