ASP.Net MVC 3 Anotações de dados do ViewModel
Estou desenvolvendo um aplicativo da Web ASP.Net MVC 3 com o Entity Framework 4.1 e estou ficando um pouco confuso com relação ao uso de Anotações de Dados para validação de formulário. Eu sempre retorno um ViewModel para um View, em vez de passar o objeto real, pois percebo que é uma prática ruim. Por exemplo
public class ViewModelTeam
{
public Team Team { get; set; }
}
My View pode ter algo parecido com isto
@model UI.ViewModels.ViewModelTeam
@Html.HiddenFor(model => model.Team.teamID)
<div class="editor-label">
@Html.LabelFor(model => model.Team.description)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Team.description)
@Html.ValidationMessageFor(model => model.Team.description)
</div>
Para validar essa visualização, criei Anotações de dados em uma classe parcial como essa
[MetadataType(typeof(TeamMetaData))]
public partial class Team
{
public class TeamMetaData
{
[DisplayName("Team Name")]
[Required(ErrorMessage = "Please enter a Team Name")]
public object description { get; set; }
E então, no meu create Controller, tenho este
[HttpPost]
public ActionResult Create(Team team)
{
if (ModelState.IsValid)
{
//Add team and redirect
}
//Got this far then errors have happened
//Add Model State Errors
ViewModelTeam viewModel = new ViewModelTeam
{
Team = team
};
return View(viewModel);
}
Agora, isso funciona bem, no entanto, quanto mais eu leio sobre o ViewModels e a validação, mais parece que é o ViewModel que deve ser validado, porque no final do dia, é o ViewModel que está sendo exibido no Vista, não o objeto.
Portanto, mudei meu ViewModel para que parecesse o seguinte
public class ViewModelListItem
{
public int teamID { get; set; }
[DisplayName("Item Name")]
[Required(ErrorMessage = "Please enter a Team Name")]
public string description { get; set; }
E também mudei meu create Controller para este
[HttpPost]
public ActionResult Create(Team team)
{
if (ModelState.IsValid)
{
//Add team and redirect
}
//Got this far then errors have happened
//Add Model State Errors
ViewModelTeam viewModel = new ViewModelTeam();
viewModel.description = team.description;
return View(viewModel);
}
Novamente, isso funciona, mas sinto que o segundo método é um pouco confuso ou não é tão eficiente na primeira maneira de fazer iss
Estaria interessado em ouvir as opiniões de outras pessoas sobre isso. Obrigado por sua ajuda e peço desculpas por um post tão long