我还在学习如何使用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);
}
答案 0 :(得分:0)
您需要在模型中传递一些内容,以便您在返回时识别数据所属的用户。将UserId属性添加到ChangeAddressViewModel是最简单的。
当您向get发出请求时,将其与ChangeAddressViewModel记录中的其他数据一起传回。然后,此信息通常以可通过POST提交的形式填充您的视图。您通常将UserId放入HiddenField中,以使其在表单中显示但未显示。
然后,您可以在控制器上创建一个更新方法,该方法具有[HttpPost]属性,该属性将ChangeAddressViewModel作为其输入参数,然后您连接表单,以便提交发布到该更新操作。
在新的更新方法中。使用您传回的userId找到所需的用户。根据从POST传入的ChangeAddressViewModel获取的值设置该用户的各种更新值。
在您的数据库上下文中,对于您的用户记录,请调用SaveCnanges()以通过EF更新记录。
答案 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);
}