asp.net mvc 3 - visual - Anotaciones de datos atributo requerido MVC3
mvc 4+ (2)
Deberías usar modelos de vista.
Sus anotaciones de datos deberían pertenecer al modelo de vista que se pasa a la vista
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; }
}
y para editar
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
}
Pase estas clases a su (s) vista (s), no a su modelo de dominio ( User
), luego, en el controlador, vuelva a asignar las propiedades del modelo de vista al modelo antes de continuar en su origen de datos.
Tengo el Modelo (Usuario) a continuación, lo uso para agregar usuarios nuevos y actualizar usuarios existentes. Cuando agrego un nuevo usuario, se requiere ingresar el nombre de usuario y la contraseña, y cuando estoy actualizando, se requiere ingresar solo el nombre de usuario porque no está permitido cambiar la contraseña. Aquí está el problema, agregando un nuevo usuario todo funciona bien porque ingreso los valores de nombre y contraseña para que ModelState.IsValid devuelva verdadero, pero al actualizar un usuario no hay entrada para la contraseña, por lo que siempre tiene el valor nulo que hace que ModelState.IsValid devuelve falso todo el tiempo. ¿Hay alguna manera de usar el mismo modelo aunque en Agregar Vista se requiera la contraseña y en la Vista de Actualización no? por favor, alguna sugerencia?
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();
}
Normalmente especifico en mi BaseViewModel
qué elementos ocultar, luego uso jQuery para ocultarlos. Sin embargo, puede interferir con su diseño si utiliza diseños más ''elegantes'' que mis diseños habituales de arriba a abajo basados en columnas. Ocultar form-group
de form-group
para cada elemento que se ocultará, y los elementos debajo solo se desplazarán hacia arriba.
Mi principal línea de trabajo son las aplicaciones de intranet LOB, así que omito todas las fantasías la mayor parte del tiempo.