ASP.Net MVC 3 Аннотации данных ViewModel

Я разрабатываю веб-приложение ASP.Net MVC 3 с Entity Framework 4.1, и я немного запутался в отношении использования аннотаций данных для проверки формы. Я всегда возвращаю ViewModel в представление, а не передаю фактический объект, поскольку понимаю, что это плохая практика. Например:

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

Мое представление может иметь что-то вроде этого

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

Чтобы проверить это представление, я создал аннотации данных в частичном классе, например так

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

И затем в моем контроллере создания у меня есть это

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

Теперь, это отлично работает, однако, чем больше я читаю о ViewModels и проверке, тем больше кажется, что именно ViewModel должна быть проверена, потому что, в конце концов, ViewModel отображается в представлении, а не объект.

Поэтому я изменил свою ViewModel, чтобы она выглядела следующим образом

public class ViewModelListItem
{

    public int teamID { get; set; }

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

И я также изменил свой контроллер создания на этот

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

Опять же, это работает, но я просто чувствую, что 2-й метод немного запутан или не так эффективен при первом способе сделать это.

Мне было бы интересно услышать мысли других людей по этому поводу. Спасибо за помощь и прошу прощения за такой длинный пост.

18
задан tcode 27 March 2012 в 13:57
поделиться