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

本文关键字:数据库 MVC 更新 地址 | 更新日期: 2023-09-27 18:32:54

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

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

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

 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 的方法中。我见过其他教程,这些教程是在单独的表上完成的,但没有来自应用程序用户的教程。

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

在"更改地址"视图页中显示数据的方法

// 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);
        }

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

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

当您向 get 发出请求时,您可以将其与 ChangeAddressViewModel 记录中的其他数据一起传递回去。然后,此信息通常以可通过 POST 提交回的表单填充您的视图。您通常将 UserId 放入隐藏字段,以便它存在于表单中但不显示。

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

在新的更新方法中。 使用已传回的 userId 找到所需的用户。根据从 POST 传入的更改地址视图模型获取的值设置该用户的各种更新值。

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

有一个关于

MVC 的分步教程 asp.net

最后,

我设法帮助自己,并想出了解决问题的方法。在这里发布它,供任何与我有类似问题的人使用。

    // 
    // 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);
    }