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