数据注释MVC3必需属性
问题描述:
我有下面的模型(用户),我用它来添加新用户并更新现有用户。 当我添加一个新用户时,需要输入用户名和密码,并且在更新时,只需输入用户名,因为它不允许更改密码。问题在于,添加一个新用户一切正常,因为我输入了名称和密码值,所以ModelState.IsValid返回true,但是当更新用户时没有输入密码,所以它总是有空值,这使得ModelState.IsValid始终返回false。 有没有办法使用相同的模型,即使在添加视图中需要密码并且在更新视图中它不是? 请问,有什么建议吗?数据注释MVC3必需属性
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();
}
答
您应该使用视图模型。
你的数据的注释,然后将在视图模型属于被传递到视图
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; }
}
和编辑
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
}
通过这些类视图(S),而不是你的域模型(User
),然后在控制器中将视图模型属性映射回模型,然后保留到数据源。
答
我通常在我的BaseViewModel
中指定要隐藏的元素,然后使用jQuery来隐藏它们。尽管如此,如果使用比我通常的从顶部到底部列的布局更多的“花哨”布局,它可能会混淆你的布局。隐藏每个要隐藏的元素的form-group
,并且它下面的元素只是向上移动。
我的主要工作是LOB内联网应用程序,所以我大部分时间都跳过所有幻想。
so我应该有两个模型?一个POCO类User将DbSet和其他User类用于ViewModel? – Sah 2013-02-28 18:42:44
你应该有一个poco,User;那么尽可能多的视图模型,你需要你的意见。 – 2013-02-28 18:45:00
我明白了,非常感谢! – Sah 2013-02-28 18:49:23