Asp.net mvc 使用自定义模型进行编辑时出现的问题
我有这个数据模型:Asp.net mvc 使用自定义模型进行编辑时出现的问题,asp.net-mvc,asp.net-mvc-3,viewmodel,Asp.net Mvc,Asp.net Mvc 3,Viewmodel,我有这个数据模型: public class User { public long UserID { get; set; } [Required(ErrorMessage = "User name is required.")] [MaxLength(50, ErrorMessage = "User name cannot be longer than 50 characters.")] public string Use
public class User
{
public long UserID { get; set; }
[Required(ErrorMessage = "User name is required.")]
[MaxLength(50, ErrorMessage = "User name cannot be longer than 50 characters.")]
public string UserName { get; set; }
[Email]
[Required(ErrorMessage = "Email is required.")]
[MaxLength(100, ErrorMessage = "Email cannot be longer than 100 characters.")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required.")]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
public string Password { get; set; }
[MaxLength(150, ErrorMessage = "Full name cannot be longer than 150 characters.")]
public string FullName { get; set; }
public int UserTypeID { get; set; }
public virtual UserType UserType { get; set; }
public virtual ICollection<Page> Pages { get; set; }
}
但是我对如何将EditUserModel传递到我的数据上下文来更新它感到困惑。对不起,这似乎很简单,但我真的被难住了
这是我修改的自动生成的编辑操作:
[IsAdministrator]
[HttpPost]
public ActionResult Edit(EditUserModel user)
{
if (ModelState.IsValid)
{
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.UserTypeID = new SelectList(db.UserTypes, "UserTypeId", "Name", user.UserTypeID);
return View(user);
}
这是我遇到的问题:
db.Entry(user).State = EntityState.Modified;
我创建自定义类的原因是为了避免从视图中暴露密码。这无法工作,因为您正在尝试保存视图模型 您可以使用将数据从视图模型重写到数据模型。之后,您应该能够保存更改
User userModel = Mapper.Map<EditUserModel, User>(user);
userModel = // todo: get password from database
// todo: attach your model to context and save changes
User-userModel=Mapper.Map(用户);
userModel=//todo:从数据库获取密码
//todo:将模型附加到上下文并保存更改
我首先使用实体框架代码,这种方法非常有效。谢谢,但有没有其他方法不必下载Automapper?您可以从db上下文中获取用户对象,并从视图模型中重写值。我尝试过,但db.Entry(user.State=EntityState.Modified;不会与我的视图模型一起工作。我的意思是这样的
var userModel=db.Users.Single(u=>u.Id==user.Id);userModel.UserName=user.UserName代码>是的,我理解你的意思,因为我已经知道了,但是将它保存到我的上下文将不起作用,因为作为一个视图模型,我没有在我的上下文中定义它。
User userModel = Mapper.Map<EditUserModel, User>(user);
userModel = // todo: get password from database
// todo: attach your model to context and save changes