MVC 4:构建复合视图模型

时间:2013-03-07 17:02:27

标签: asp.net-mvc linq

我是ASP.NET MVC的新手。我需要从三个嵌套或级联类中构建一个复合视图模型:Sport> Tournament> TournamentEvent

public class Sport
{
    public int Id { get; set; }
    public string SportName { get; set; }
    public virtual ICollection<Tournament> Tournaments { get; set; }
}

public class Tournament
{
    public int Id { get; set; }
    public string TournamentName { get; set; }
    public int SportId { get; set; }
    public virtual ICollection<TournamentEvent> TournamentEvents { get; set; }
}

public class TournamentEvent
{
    public int Id { get; set; }
    public string EventName { get; set; }
    public int TournamentId { get; set; }
}

您可以收集,每项运动都包含一系列锦标赛,每场锦标赛都包含一系列赛事。我需要构建一个无序列表,如下所示:

    <li> Soccer
        <li>English Premier League
            <li>Chelsea v Arsenal</li>
        </li>
    </li>

我需要使用linq构建一个复合视图模型来传递给我的视图,但我无法弄明白。请帮忙

3 个答案:

答案 0 :(得分:0)

您是否只需要一个包含Sport列表的父vie模型?

public class Sport
{
    public List<Sport> Sports { get; set; }
}

您可以使用剃刀来迭代这些集合。

你能澄清一下你认为linq进入它的位置吗?我可能有错误的结束。

答案 1 :(得分:0)

我认为这不起作用,汤姆。我需要访问Tournament和TournamentEvent类,我需要将它们加载到我的对象中,这是linq的用武之地。在SportsController中:

public partial class SportsController : Controller
{
    private MyDb db = new MyDb();

public virtual ActionResult Index()
    {
      var menuObject = from s in db.Sports
                         select s;

      return View(menuObject);
     }
}

答案 2 :(得分:0)

创建一个类称为SportTournamentEventViewModel.cs

使用“LibraryName”.Models;

public class SportTournamentEventViewModel
{
    public List<Sport> Sports {get;set;}
    public List<Tournament> Tournaments {get;set;}
    public List<TournamentEvent> Events {get;set;}
}

在你的行动中

private NameOfEntities db = new NameOfEntities();

public ActionResult "ActionResultName"()
{
    db.Configuration.LazyLoading = false;

    var sportList = db.Sport.ToList();
    var tournamentList = db.Tournament.ToList();
    var eventList = db.TournamentEvents.ToList();

    var viewModel = new SportTournamentViewModel
    {
        Sports = sportList,
        Tournaments = tournamentList,
        Events = eventList,
    };

    return View(viewModel);
}