将更新的地址发布到数据库MVC 5

时间:2014-12-02 00:07:00

标签: c# asp.net-mvc asp.net-mvc-5

我还在学习如何使用MVC 5,到目前为止,我设法在我的管理视图页面中显示我的用户配置文件的自定义字段:

http://puu.sh/ddmVY/2533472010.png

用户注册并填写这些字段,并将它们存储在与存储用户名和密码数据相同的位置。 我在IdentityModels.cs中的ApplicationUser下面添加了这些字段,如此处所示

 public class ApplicationUser : IdentityUser
    {

        // Additional user fields needed for registration
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Address { get; set; }
        public string City { get; set; }
        public string State { get; set; }
        public int ZipCode { get; set; }


        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here
            return userIdentity;
        }
    }

我希望能够编辑地址,这样如果有人移动,他们可以自行更新。我有获取数据的方法并将它们放在ChangeAddress视图中的文本框中,但是当需要更新数据时,我不知道如何去做。我不知道如何编写post方法以下是页面的内容,我希望在ManageController.cs中的方法中添加它。我已经看过其他教程在单独的表上完成但不是ApplicationUser中的那个。

http://puu.sh/ddn98/96cab8a252.png

我在ChangeAddress视图页面中显示数据的方法

// GET: /Manage/ChangeAddress
        [HttpGet]
        public async Task<ActionResult> ChangeAddress()
        {

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

            var model = new ChangeAddressViewModel
            {
                Address = user.Address,
                City = user.City,
                State = user.State,
                ZipCode = user.ZipCode

            };
            return View(model);
        }

2 个答案:

答案 0 :(得分:0)

您需要在模型中传递一些内容,以便您在返回时识别数据所属的用户。将UserId属性添加到ChangeAddressViewModel是最简单的。

当您向get发出请求时,将其与ChangeAddressViewModel记录中的其他数据一起传回。然后,此信息通常以可通过POST提交的形式填充您的视图。您通常将UserId放入HiddenField中,以使其在表单中显示但未显示。

然后,您可以在控制器上创建一个更新方法,该方法具有[HttpPost]属性,该属性将ChangeAddressViewModel作为其输入参数,然后您连接表单,以便提交发布到该更新操作。

在新的更新方法中。使用您传回的userId找到所需的用户。根据从POST传入的ChangeAddressViewModel获取的值设置该用户的各种更新值。

在您的数据库上下文中,对于您的用户记录,请调用SaveCnanges()以通过EF更新记录。

There is a step by step tutorial for MVC on asp.net

答案 1 :(得分:0)

最后,我设法帮助自己,并提出了解决问题的方法。在这里发帖给任何遇到类似问题的人。

    // 
    // POST: /Manage/ChangeAddress
    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> ChangeAddress(ChangeAddressViewModel model)
    {
        if (ModelState.IsValid)
        {

            // Get the current application user
            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());
            if (user != null)
            {
                //grab the details
                user.Address = model.Address;
                user.City = model.City;
                user.State = model.State;
                user.ZipCode = model.ZipCode;

                // Update the user
                var result = await UserManager.UpdateAsync(user);
                if (result.Succeeded)
                {
                    return RedirectToAction("Index", new { Message = ManageMessageId.ChangeAddressSuccess });
                }
                AddErrors(result);
                return View(model);
            }
        }
        return View(model);
    }