ASP.NET MVC 5: 用户资料编辑页面的创建

在本系列文章的第一部分,介绍了如何从零开始创建一个简单的数据库,概述了ASP.NET MVC的基本概念,并展示了如何使用Entity Framework 6构建简单的数据访问,以及在MVC中创建一个简单的注册页面。第二部分讨论了创建基本登录页面以及在MVC应用程序中实现简单的基于角色的页面授权的逐步过程。第三部分讨论了如何使用jQuery和jQuery AJAX在应用程序中执行获取、编辑、更新和删除(FEUD)操作。

如果还没有阅读之前的文章,请参考以下链接:

  • ASP.NET MVC5: 构建第一个Web应用程序 - 第一部分
  • ASP.NET MVC 5: 构建第一个Web应用程序 - 第二部分
  • ASP.NET MVC5: 构建第一个Web应用程序 - 第三部分

在本文中,将创建一个页面,允许用户修改他们的个人资料数据。

开始吧!

首先,打开“UserManager”类,并添加以下方法: public UserProfileView GetUserProfile(int userID) { UserProfileView UPV = new UserProfileView(); using(DemoDBEntities db = new DemoDBEntities()) { var user = db.SYSUsers.Find(userID); if(user != null) { UPV.SYSUserID = user.SYSUserID; UPV.LoginName = user.LoginName; UPV.Password = user.PasswordEncryptedText; var SUP = db.SYSUserProfiles.Find(userID); if(SUP != null) { UPV.FirstName = SUP.FirstName; UPV.LastName = SUP.LastName; UPV.Gender = SUP.Gender; } var SUR = db.SYSUserRoles.Find(userID); if(SUR != null) { UPV.LOOKUPRoleID = SUR.LOOKUPRoleID; UPV.RoleName = SUR.LOOKUPRole.RoleName; UPV.IsRoleActive = SUR.IsActive; } } } return UPV; } 上述方法通过传递SYSUserID作为参数,从数据库中获取特定用户的信息。可能已经注意到该方法返回UserProfileView类型,它包含来自不同表的一些属性。

现在,打开“HomeController”类并添加以下动作方法: [Authorize] public ActionResult EditProfile() { string loginName = User.Identity.Name; UserManager UM = new UserManager(); UserProfileView UPV = UM.GetUserProfile(UM.GetUserID(loginName)); return View(UPV); } [HttpPost] [Authorize] public ActionResult EditProfile(UserProfileView profile) { if(ModelState.IsValid) { UserManager UM = new UserManager(); UM.UpdateUserAccount(profile); ViewBag.Status = "Update Successful!"; } return View(profile); } 上面的代码由两个动作方法组成。第一个EditProfile()方法将在页面被请求并加载到浏览器时被调用。它通过调用GetUserProfile()方法并传递SYSUserID作为参数来获取用户资料数据。第二个是重载方法,它将在POST请求期间被调用,即当点击保存按钮时。它首先检查字段的有效性(如果它们有效且不为空),然后调用UpdateUserAccount()方法,并将UserProfileView模型从视图传递到该方法。如果还记得之前的文章系列,UpdateUserAccount()方法是实际将数据保存到数据库的地方。

可能还注意到这两个动作方法都装饰有[Authorize]属性,以确保两种方法只能由经过身份验证的用户访问,无论他们的角色如何。

下一步是为个人资料页面生成视图。要做到这一点,右键单击EditProfile()方法并选择“添加视图”。在“添加视图”对话框中,提供所需的字段,如下图所示:

请注意Model类字段的值。它应该是“UserProfileView”。现在,点击添加以为生成UI。

Visual Studio将根据从模型(UserProfileView)中定义的字段生成所有控件。这意味着它还将生成不想编辑的不必要字段,例如LOOKUPRoleID和IsRoleActive。此外,还需要为显示Gender字段提供一个下拉列表。因此,请确保更新生成的HTML标记。它看起来类似于以下内容:

@model MVC5RealWorld.Models.ViewModel.UserProfileView @{ ViewBag.Title = "EditProfile"; Layout = "~/Views/Shared/_Layout.cshtml"; }

Edit Your Profile

@using(Html.BeginForm()) { @Html.AntiForgeryToken()
@ViewBag.Status @Html.ValidationSummary(true, "", new { @class = "text-danger" }) @Html.HiddenFor(model => model.SYSUserID)
@Html.LabelFor(model => model.RoleName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DisplayFor(model => model.RoleName) @Html.ValidationMessageFor(model => model.RoleName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.LoginName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.LoginName, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.LoginName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.FirstName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.FirstName, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.FirstName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.LastName, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.LastName, new { htmlAttributes = new { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.LastName, "", new { @class = "text-danger" })
@Html.LabelFor(model => model.Gender, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownListFor(model => model.Gender, new List { new SelectListItem { Text = "Male", Value = "M" }, new SelectListItem { Text = "Female", Value = "F" }   }, new { @class = "form-control" })
}
@Html.ActionLink("Back", "Welcome")

上面的标记是一个强类型视图,它根据UserProfileView模型渲染HTML。现在,在“Welcome.cshtml”视图中添加以下标记。

@Html.ActionLink("Edit Profile", "EditProfile", "Home")

上面的标记只是一个链接到EditProfile页面的链接,这样当登录后,可以轻松地导航到个人资料页面并开始修改数据。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485