冯 海

一个程序新人菜鸟的日记,希望大家多多关照。QQ:32316131

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")
}

  

 四、效果

 

 

 

posted @ 2018-08-28 07:53  秋天来了哟  阅读(204)  评论(0)    收藏  举报
认识就是缘份,愿天下人都快乐!
QQ: 32316131
Email: 32316131@qq.com