将更新的地址发布到数据库 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);
}
您需要在模型中传递一些内容,以便您在数据返回时识别数据属于哪个用户。最简单的方法是将 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);
}