2018教程之mvc+ef之四:用户管理之编辑用户
在编辑用户的时候发现一个问题,我的后台模型验证不起作用了,最后才发现,在get方法中,对所有部门读出来存入viewbag,然后post方法当时没有读和赋值呀。
在验证不合格的时候,他重新返回模型的时候,就没有VIEWBAG值,出错。
一、新建模型。
在viewmodel下新建EditUsers模型
using System;
using System.ComponentModel.DataAnnotations;
namespace MYtest2018.ViewModels
{
public class EditUsers
{
public string Id { get; set; }
[Display(Name = "登录名")]
public string UserName { get; set; }
[Display(Name = "电话")]
public virtual string PhoneNumber { get; set; }
[Required]
[EmailAddress]
[Display(Name = "电子邮件")]
public string Email { get; set; }
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime BirthDate { get; set; }
public int Gender { get; set; }
[Required]
[Display(Name = "真实姓名")]
public string RealName { get; set; }
[Display(Name = "部门ID")]
public string DepartmentId { get; set; }
[Display(Name = "地址")]
public string Address { get; set; }
[Display(Name = "微信")]
public virtual string WX { get; set; }
public virtual string QQ { get; set; }
[Display(Name = "头像")]
public string HeaderPic { get; set; }
}
}
二、后台代码
/// <summary>
/// 下面是编辑用户资料的代码
/// </summary>
/// <param name="disposing"></param>
[HttpGet]
//[Authorize(Roles = "Super")]
[AllowAnonymous]
public ActionResult Edit(string id)
{
if (string.IsNullOrWhiteSpace(id))
{
return new HttpStatusCodeResult(System.Net.HttpStatusCode.BadRequest);
}
///读出所有的部门名称分类,以下拉框的形式写入。
ViewBag.drolistDepart = (db.Departments).Select(g => new SelectListItem
{
Text = g.DepartmentName,
Value = g.Id,
Selected = false
});
ApplicationUser user = UserManager.FindById(id);
if (user == null)
{
return HttpNotFound();
}
///定义一个EditUserViewModel模型
var editUserViewModel = new EditUsers(){
Id = user.Id,
Email = user.Email,
PhoneNumber = user.PhoneNumber,
WX = user.WX,
QQ = user.QQ,
DepartmentId = user.DepartmentId,
Address = user.Address,
UserName = user.UserName,
RealName = user.RealName,
HeaderPic = user.HeaderPic,
Gender=user.Gender??0,
BirthDate=user.BirthDate??DateTime.Now
};
return View(editUserViewModel);
}
/// <summary>
///Edit 的POST方法
/// </summary>
/// <param name="id"></param>
/// <param name="editUserViewModel"></param>
/// <returns></returns>
[HttpPost]
//[Authorize(Roles = "Super")]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit(EditUsers editUserViewModel)
{
if (ModelState.IsValid && !string.IsNullOrEmpty(editUserViewModel.Id))
{
///用模型传入的数据,赋值给User 模型
ApplicationUser user = UserManager.FindById(editUserViewModel.Id);
user.Email = editUserViewModel.Email;
user.PhoneNumber = editUserViewModel.PhoneNumber;
user.WX = editUserViewModel.WX;
user.QQ = editUserViewModel.QQ;
user.DepartmentId = editUserViewModel.DepartmentId;
user.Address = editUserViewModel.Address;
user.RealName = editUserViewModel.RealName;
user.Gender = editUserViewModel.Gender;
user.BirthDate = editUserViewModel.BirthDate;
var result = await UserManager.UpdateAsync(user);
if (result.Succeeded)
{
return RedirectToAction("ListUsers", "Account");
}
AddErrors(result);
}
/////读出所有的部门名称分类,以下拉框的形式写入。
ViewBag.drolistDepart = (db.Departments).Select(g => new SelectListItem
{
Text = g.DepartmentName,
Value = g.Id,
Selected = false
});
return View(editUserViewModel);
}
三、前台
@model MYtest2018.ViewModels.EditUsers
@{
ViewBag.Title = "Edit";
Layout = "~/Views/Shared/_Layoutadmin.cshtml";
}
<div class="row wrapper border-bottom white-bg page-heading">
<div class="col-lg-10">
<h2>此页面为修改用户详细资料!</h2>
<ol class="breadcrumb">
<li>
<a href="/">返回</a>
</li>
<li>
<a>上传头像</a>
</li>
</ol>
</div>
<div class="col-lg-2">
</div>
</div>
<div class="wrapper wrapper-content animated fadeInRight ecommerce">
<div class="ibox-title">
<img src=@Html.DisplayFor(m => m.HeaderPic) alt="头像" class="img-circle" height="72">
</div>
<div class="ibox-content m-b-sm border-bottom">
@using (Html.BeginForm("Edit", "Account", FormMethod.Post))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="order_id">部门</label>
@Html.DropDownList("DepartmentId", new SelectList(ViewBag.drolistDepart, "Value", "Text"), "请选择", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.DepartmentId, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="status">真名</label>
@Html.TextBoxFor(m => m.RealName, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.RealName, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="customer">Email(唯一)</label>
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="customer">电话</label>
@Html.TextBoxFor(m => m.PhoneNumber, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.PhoneNumber, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="date_modified">生日</label>
<div class="input-group date">
<span class="input-group-addon"><i class="fa fa-calendar"></i></span><input type="text" class="form-control"
id="BirthDate" name="BirthDate"
value=@Html.DisplayFor(m => m.BirthDate)>
@Html.ValidationMessageFor(m => m.BirthDate, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="amount"> QQ</label>
@Html.TextBoxFor(m => m.QQ, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.QQ, "", new { @class = "text-danger" })
</div>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="order_id">性别</label>
<select class="form-control" id="Gender" name="Gender">
<option value="">请选择</option>
<option selected="selected" value="1">男</option>
<option value="0">女</option>
</select>
@Html.ValidationMessageFor(m => m.Gender, "", new { @class = "text-danger" })
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="status">地址</label>
@Html.TextBoxFor(m => m.Address, new { @class = "form-control" })
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label class="control-label" for="customer">微信</label>
@Html.TextBoxFor(m => m.WX, new { @class = "form-control" })
</div>
</div>
</div>
<div class="text-center">
<input class="btn btn-primary" type="submit" value="确认修改" /> @Html.ActionLink("返回", "ListUsers", "", new { @class = "btn btn-warning btn-sm" })
</div>
}
</div>
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
四、效果

浙公网安备 33010602011771号