ASP.Net MVC 3 ViewModel Annotations de Données

Je suis en train d'élaborer un ASP.Net MVC 3 application Web avec Entity Framework 4.1 et je suis un peu confus en ce qui concerne l'aide d'Annotations de Données pour la validation d'un formulaire.
Je reviens toujours un ViewModel de Vue, par opposition à la réussite de l'objet réel que je sais que c'est une mauvaise pratique. Par exemple:

public class ViewModelTeam
{
    public Team Team { get; set; }
}

Mon point de Vue pourrait alors avoir quelque chose comme ceci

@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>

Pour valider ce point de Vue, j'ai créé des Annotations de Données dans une classe partielle comme

[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; }

Et puis, dans ma créer Contrôleur, j'ai ce

[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);
    }

Maintenant, cela fonctionne très bien, cependant, plus j'ai lu Viewmodel et de validation, plus il nous semble que c'est ce Dernier qui doit être validé, car à la fin de la journée, c'est le ViewModel qui est affiché dans la Vue, non pas de l'objet.

Donc, j'ai changé mon ViewModel pour ressembler à la suivante

public class ViewModelListItem
{

    public int teamID { get; set; }

    [DisplayName("Item Name")]
    [Required(ErrorMessage = "Please enter a Team Name")]
    public string description { get; set; }

Et j'ai aussi changé mon créer Contrôleur à cette

[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);
    }

Encore une fois, cela fonctionne, mais je viens d'obtenir la sensation de la 2e méthode est un peu brouillon ou pas aussi efficace lors de la première manière de faire.

Je serais intéressé à entendre les pensées d'autres personnes sur ce. Je vous remercie pour votre aide et je m'excuse pour ce long post.

InformationsquelleAutor tcode | 2012-03-27