编辑用户档案详情

use*_*685 0 asp.net-mvc user-profile simplemembership

如何创建操作和视图以编辑用户自定义信息?

授权基于VS与MVC 4项目创建的成员资格.

我添加了其他列,例如FirstName等.我需要并且注册工作正常,但我不知道如何在视图中显示此属性@Html.EditorFor以及保存数据库中的更改(表UserProfile).

非常感谢每一个提示.

创建版本的模型:

public class UserProfileEdit
    {
        [Required]
        [Display(Name = "First name")]
        public string FirstName { get; set; }

        [Required]
        [Display(Name = "Last name")]
        public string LastName { get; set; }

        [Required]
        [Display(Name = "Email")]
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

Tom*_*mmi 7

因此,您需要一个编辑页面来编辑用户的个人信息.其他列已添加到UserProfile表.

首先,您需要一个用于编辑视图的动作方法.从数据库中获取用户并构建UserProfileEdit模型.

public ActionResult Edit()
{
            string username = User.Identity.Name;

            // Fetch the userprofile
            UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.Equals(username));

            // Construct the viewmodel
            UserProfileEdit model = new UserProfileEdit();
            model.FirstName = user.FirstName;
            model.LastName = user.LastName;
            model.Email = user.Email;

            return View(model);
}
Run Code Online (Sandbox Code Playgroud)

当我们发布editform时,我们发布了UserProfileEdit模型.我们再次从数据库中获取UserProfile并更改已发布的字段.

    [HttpPost]
    public ActionResult Edit(UserProfileEdit userprofile)
    {
        if (ModelState.IsValid)
        {
            string username = User.Identity.Name;
            // Get the userprofile
            UserProfile user = db.UserProfiles.FirstOrDefault(u => u.UserName.Equals(username));

            // Update fields
            user.FirstName = userprofile.FirstName;
            user.LastName = userprofile.LastName;
            user.Email = userprofile.Email;

            db.Entry(user).State = EntityState.Modified;

            db.SaveChanges();

            return RedirectToAction("Index", "Home"); // or whatever
        }

        return View(userprofile);
    }
Run Code Online (Sandbox Code Playgroud)

现在它只是在你的视图中编码.我看起来像这样:

@model UserProfileEdit

@using (Html.BeginForm("Edit", "Account"))
{
    @Html.EditorFor(model => model.FirstName)
     @Html.EditorFor(model => model.LastName)
     @Html.EditorFor(model => model.Email)

    <input type="submit" value="Save" />
}
Run Code Online (Sandbox Code Playgroud)

如果您的编辑模型有大量字段,Automapper可能会有所帮助.此解决方案编辑当前登录的用户,但添加用户名作为操作参数相当简单.