asp.net mvc 3 framework, передавая информацию о модели в Get request of create action - PullRequest
1 голос
/ 24 августа 2011

У меня проблемы с передачей информации о просмотре из действия Get / Create в мой вид. Вот мои три модельных класса;

public class Competition
{
    public int Id { get; set; }
    public int CompetitionId { get; set; }
    public string Name { get; set; }
    public string Prize { get; set; }
}

public class CompetitionEntry
{
    public int Id { get; set; }
    public int CompetitionEntryId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public int CompetitionId { get; set; }
}

public class CompetitionEntryViewModel
{
    public int Id { get; set; }
    public Competition Competitions { get; set; }
    public int CompetitionId { get; set; }
    public string Name { get; set; }
    public string Email { get; set; } 
}

Вот мое действие Get / Create в CompetitionEntry Controller;

public ActionResult Create(int id)
{
    CompetitionEntryViewModel competitionentryviewmodel = db.CompetitionEntriesView.Find(id);
    return View(competitionentryviewmodel);
}

Я знаю, что это не работает. Параметр id входит в URL в порядке. Как получить доступ к своему классу соревнований в действии Get? Мне нужно, чтобы я мог отображать название конкурса в моем представлении «Создать конкурс».

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 24 августа 2011

То, что вы пытаетесь сделать, это построить граф объектов и отобразить его через модель представления.Для этого вам необходимо сопоставить модель (ы) вашего домена с моделью представления.

Вы можете выполнить сопоставление самостоятельно, написав много кода (заново изобретая колесо), или выможет рассмотреть возможность использования сторонних инструментов, чтобы сделать это для вас.Я рекомендую вам использовать AutoMapper, поскольку использовать imo очень просто.

Другая проблема заключается в том, что ваша модель представления содержит модель домена.Это может вызвать головную боль в ближайшем будущем.На вашем месте я бы заменил Competition на CompetitionViewModel.

Я бы также рассмотрел создание модели представления для списка соревнований, т.е. CompetitionsViewModel.Посмотрите на частичные виды, чтобы увидеть, как вы можете отобразить список соревнований.

Удачи

0 голосов
/ 24 августа 2011
public ActionResult Create(int id)
{
      var data = db.CompetitionEntriesView.Find(id);

      CompetitionEntryViewModel competitionentryviewmodel = new CompetitionEntryViewModel();
      competitionentryviewmodel.CompetitionName = data.Name;

      return View(competitionentryviewmodel);
}
...