ASP.NET MVC5网站开发之用户资料的修改和删除3(七)


这次主要实现管理后台界面用户资料的修改和删除,修改用户资料和角色是经常用到的功能,但删除用户的情况比较少,为了功能的完整性还是坐上了。主要用到两个action “Modify”和“Delete”。

一、用户资料修改(Modify)

此功能分两个部分:

public ActionResult Modify(int id) 用于显示用户信息

[httppost]

public ActionResult Modify(FormCollection form)用户就收前台传来的信息并修改

1、显示用户信息

/// <summary>
  /// 修改用户信息
  /// </summary>
  /// <param name="id">用户主键</param>
  /// <returns>分部视图</returns>
  public ActionResult Modify(int id)
  {
   //角色列表
   var _roles = new RoleManager().FindList();
   List<SelectListItem> _listItems = new List<SelectListItem>(_roles.Count());
   foreach (var _role in _roles)
   {
    _listItems.Add(new SelectListItem() { Text = _role.Name, Value = _role.RoleID.ToString() });
   }
   ViewBag.Roles = _listItems;
   //角色列表结束
   return PartialView(userManager.Find(id));
  }

此action有一个参数id,接收传入的用户ID,在action中查询角色信息,并利用viewBage传递到视图,并通过return PartialView(userManager.Find(id))向视图传递用户模型返回分部视图。

视图代码如下:

@model Ninesky.Core.User

@using (Html.BeginForm())
{
 @Html.AntiForgeryToken()

 <div class="form-horizontal">
  @Html.ValidationSummary(true, "", new { @class = "text-danger" })
  @Html.HiddenFor(model => model.UserID)

  <div class="form-group">
   @Html.LabelFor(model => model.RoleID, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.DropDownListFor(model => model.RoleID, (IEnumerable<SelectListItem>)ViewBag.Roles, new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.RoleID, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.Username, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.Username, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } })
    @Html.ValidationMessageFor(model => model.Username, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.Sex, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.RadioButtonFor(model => model.Sex, 1) 男
    @Html.RadioButtonFor(model => model.Sex, 0) 女
    @Html.RadioButtonFor(model => model.Sex, 2) 保密
    @Html.ValidationMessageFor(model => model.Sex, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.Password, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.Password, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Password, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.LastLoginTime, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.LastLoginTime, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } })
    @Html.ValidationMessageFor(model => model.LastLoginTime, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.LastLoginIP, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.LastLoginIP, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } })
    @Html.ValidationMessageFor(model => model.LastLoginIP, "", new { @class = "text-danger" })
   </div>
  </div>

  <div class="form-group">
   @Html.LabelFor(model => model.RegTime, htmlAttributes: new { @class = "control-label col-md-2" })
   <div class="col-md-10">
    @Html.EditorFor(model => model.RegTime, new { htmlAttributes = new { @class = "form-control", disabled = "disabled" } })
    @Html.ValidationMessageFor(model => model.RegTime, "", new { @class = "text-danger" })
   </div>
  </div>

 </div>
}

2、修改用户资料的后台处理

[HttpPost]
  [ValidateAntiForgeryToken]
  public ActionResult Modify(int id,FormCollection form)
  {
   Response _resp = new Auxiliary.Response();
   var _user = userManager.Find(id);
   if (TryUpdateModel(_user, new string[] { "RoleID", "Name", "Sex", "Email" }))
   {
    if (_user == null)
    {
     _resp.Code = 0;
     _resp.Message = "用户不存在,可能已被删除,请刷新后重试";
    }
    else
    {
     if (_user.Password != form["Password"].ToString()) _user.Password = Security.SHA256(form["Password"].ToString());
     _resp = userManager.Update(_user);
    }
   }
   else
   {
    _resp.Code = 0;
    _resp.Message = General.GetModelErrorString(ModelState);
   }
   return Json(_resp);
  }

此方法有两个参数id 和FormCollection form,不用User直接做模型的原因是因为user会把前台所有数据都接收过来,这里我并不想允许修改用户名,所以在方法中使用TryUpdateModel绑定允许用户修改的属性。TryUpdateModel在绑定失败时同样会在在ModelState中记录错误,可以利用自定义方法GetModelErrorString获取到错误信息并反馈给视图。

2、前台显示和处理

打开Index视图找到表格初始化方法,格式化列“Username”使其显示一个连接,代码红线部分。

使其看起来这个样子,当用户点击连接的时候可以显示修改对话框

弹出窗口和发送到服务器的js代码写到表格的onLoadSuccess方法里

onLoadSuccess: function () {

     //修改
     $("a[data-method='Modify']").click(function () {
      var id = $(this).attr("data-value");
      var modifyDialog = new BootstrapDialog({
       title: "<span class='glyphicon glyphicon-user'></span>修改用户",
       message: function (dialog) {
        var $message = $('<div></div>');
        var pageToLoad = dialog.getData('pageToLoad');
        $message.load(pageToLoad);

        return $message;
       },
       data: {
        'pageToLoad': '@Url.Action("Modify")/' + id
       },
       buttons: [{
        icon: "glyphicon glyphicon-plus",
        label: "保存",
        action: function (dialogItself) {
         $.post($("form").attr("action"), $("form").serializeArray(), function (data) {
          if (data.Code == 1) {
           BootstrapDialog.show({
            message: data.Message,
            buttons: [{
             icon: "glyphicon glyphicon-ok",
             label: "确定",
             action: function (dialogItself) {
              $table.bootstrapTable("refresh");
              dialogItself.close();
              modifyDialog.close();
             }
            }]

           });
          }
          else BootstrapDialog.alert(data.Message);
         }, "json");
         $("form").validate();
        }
       }, {
        icon: "glyphicon glyphicon-remove",
        label: "关闭",
        action: function (dialogItself) {
         dialogItself.close();
        }
       }]
      });
      modifyDialog.open();
     });
     //修改结束
}

显示效果如下图

二、删除用户

UserController中添加删除方法

/// <summary>
  /// 删除
  /// </summary>
  /// <param name="id">用户ID</param>
  /// <returns></returns>
  [HttpPost]
  public ActionResult Delete(int id)
  {
   return Json(userManager.Delete(id));
  }

打开Index视图找到表格初始化方法,添加“操作”列格式化列使其显示一个删除按钮,代码红框部分。

前台显示效果

然后在表格的onLoadSuccess方法里刚写的修改用户信息的js代码后面写删除用户的js代码

//修改结束

     //删除按钮
     $("a[data-method='Delete']").click(function () {
      var id = $(this).attr("data-value");
      BootstrapDialog.confirm("你确定要删除" + $(this).parent().parent().find("td").eq(3).text() + "吗?\n 建议尽可能不要删除用户。", function (result) {
       if (result) {
        $.post("@Url.Action("Delete", "User")", { id: id }, function (data) {
         if (data.Code == 1) {
          BootstrapDialog.show({
           message: "删除用户成功",
           buttons: [{
            icon: "glyphicon glyphicon-ok",
            label: "确定",
            action: function (dialogItself) {
             $table.bootstrapTable("refresh");
             dialogItself.close();
            }
           }]

          });
         }
         else BootstrapDialog.alert(data.Message);
        }, "json");
       }
      });
     });
     //删除按钮结束
    }
   });
   //表格结束

前台显示效果

==========================================

代码下载请见http://www.cnblogs.com/mzwhj/p/5729848.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持phpstudy。



相关阅读:
php构造函数与析构函数
CSS复合选择器使用介绍
php抓取网站图片并保存的实现方法
JavaScript中实现异步编程模式的4种方法
sql server 入门语句总结
mysql(master/slave)主从复制原理及配置图文详解
table对象中的insertRow与deleteRow使用示例
Linux下用于对比文件的diff命令使用教程
win10预览版10074 bug有哪些 win10预览版10074 bug汇总
Java中Spring获取bean方法小结
java jdbc连接mysql数据库实现增删改查操作
苹果Mac OS X系统中怎么设置滚动条始终显示?
简单了解PHP编程中数组的指针的使用
详解Android进程和线程
快速导航
PHP MySQL HTML CSS JavaScript MSSQL AJAX .NET JSP Linux Mac ASP 服务器 SQL jQuery C# C++ java Android IOS oracle MongoDB SQLite wamp 交通频道 作文范文 当我去世的前一秒作文800字 超市一景作文350字 20年后的我450字 清明节微信文章素材 我心飞扬-微幸福 雷锋精神在我心中作文500字 《风筝》同步练习8(会员上传) 毕业生税务局实习报告 中药鉴定学口诀 2013年11月学期教师工作总结 研究生入党申请书(2015) 感谢让我爱你一次 打算作文250字 孝里藏爱 我在努力,谁为我让路 幽兰情 团市委副书记述职述廉报告_述廉报告 药业公司管理制度 读作文800字 做个好人 春之圆舞曲 古代文化常识之【晚唐诗坛】 安全员半年工作总结 《枝沂吟》 我知道作文400字 情人节祝福。 小学六年级作文600字:理发 爱心传递美好明天 明天的热爱 街边捡幸福 赏《清明雨上》有感作文900字 牵着你的手,说好不再放手2作文1100字 2016年给朋友的小年祝福语大全 读料 垂耳兔 哭出来的荣誉证书作文800字 2014年中考英语总复习工作计划_工作计划范文 帮妈妈做饭作文250字 青春不散场 那真的不是我能想到的结局 。 感悟张良 道一声珍重 记一次有趣的活动_关于描写体育活动的小学生作文450字 赵老师,您相信我吗?作文300字 看图写话 美丽无比的春天 中秋节藏头诗 好作鸳鸯梦 初二学生暑假学习计划 证券行业演讲呼唤工作激情谱写新篇章 陪我在大雨中聊天儿 5月份国旗下讲话稿《文明、有礼,做一个有修养的人》

Copyright © 2016 phpStudy |