Sah*_*Sah 4 model modelstate data-annotations asp.net-mvc-3
我有下面的模型(用户),我用它来添加新用户和更新现有用户.当我添加新用户时,需要输入用户名和密码,当我更新时,只需要输入用户名,因为不允许更改密码.这是问题,添加一个新用户一切正常,因为我输入了名称和密码值,因此ModelState.IsValid返回true,但是当更新用户时没有输入密码,所以它总是具有null值是什么使得ModelState.IsValid始终返回false.有没有办法使用相同的模型,即使在添加视图中需要密码,在更新视图中它不是?拜托,有什么建议吗?
public class User {
public int ID { get; set; }
[Display(Name = "Nome do Usuário")]
[Required(ErrorMessage = "Digite o Nome do Usuário.")]
public string name { get; set; }
[Display(Name = "Senha")]
[Required(ErrorMessage = "Digite a Senha.")]
public string password { get; set; }
}
public ActionResult Add()
{
return View();
}
[HttpPost]
public ActionResult Add(User user)
{
UsuariosViewModel viewModel = new UsuariosViewModel();
if (ModelState.IsValid)
{
viewModel.Msg = new AdmUsuarios().CadastraUsuario(user);
}
return View(viewModel);
}
public ActionResult Update(int id)
{
UsuariosViewModel viewModel = new UsuariosViewModel();
using (var dataContext = new DBEntities())
{
Repository<User> repository = new Repository<User>(dataContext);
viewModel.User = repository.GetById(id);
}
return View(viewModel);
}
[HttpPost]
public ActionResult Update(User user, int id)
{
UsuariosViewModel viewModel = new UsuariosViewModel();
if (ModelState.IsValid)
{
viewModel.Msg = new AdmUsuarios().AlteraUsuario(user, id);
}
return View();
}
Run Code Online (Sandbox Code Playgroud)
您应该使用视图模型.
然后,您的数据注释将属于传递给视图的视图模型
public class CreateViewModel
{
public int ID { get; set; }
[Display(Name = "Nome do Usuário")]
[Required(ErrorMessage = "Digite o Nome do Usuário.")]
public string name { get; set; }
[Display(Name = "Senha")]
[Required(ErrorMessage = "Digite a Senha.")]
public string password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并编辑
public class EditViewModel
{
public int ID { get; set; }
[Display(Name = "Nome do Usuário")]
[Required(ErrorMessage = "Digite o Nome do Usuário.")]
public string name { get; set; }
//perhaps you don't need the password at all in the edit view
}
Run Code Online (Sandbox Code Playgroud)
将这些类传递给您的视图,而不是您的域模型(User),然后,在控制器中,将视图模型属性映射回模型,然后再保留到数据源.