отношения и MVC3 - PullRequest
       12

отношения и MVC3

0 голосов
/ 16 мая 2011

хорошо, поэтому у меня есть таблица команд с TeamID, TeamName и игровой стол с колонками gameid, team1, team2.

Теперь у меня нет team1 и team2 в качестве внешних ключей для таблицы команд. Я понимаю, что это облегчит, но я хочу учиться без этого. Так что team1 и team2 являются полями типа int. Проверка ограничений отсутствует.

Поэтому, когда я отображаю его в своем представлении, он отображает столбцы team1 и team2, но вместо отображения целочисленного идентификатора я хочу, чтобы он извлекал имя команды из таблицы groups.

хорошо, на мой взгляд, у меня есть следующее:

   @model IEnumerable<Betting.Models.Bets>
@{
    ViewBag.Title = "List of Games";
}
@{
    var grid = new WebGrid(source: Model, defaultSort: "EndDate", rowsPerPage: 3);    
}
<h2>
    Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<h2>
    Betting List</h2>
<div id="grid">
    @grid.GetHtml(
        tableStyle: "grid",
        headerStyle: "head",
        alternatingRowStyle: "alt",
        columns: grid.Columns(
            grid.Column("Subject"),
            grid.Column("Team1"),
            grid.Column("Team2")          
        )
    )
</div>

И мой контроллер действительно прост:

public ViewResult Index()
{

    return View(db.Bets.ToList());
}

1 Ответ

0 голосов
/ 16 мая 2011

Всегда используйте модели представлений в ASP.NET MVC, и у вас не будет таких проблем:

public class TeamViewModel
{
    public string Team1Name { get; set; }
    public string Team2Name { get; set; }
    public string Subject { get; set; }
}

, затем в действии контроллера выполните необходимое сопоставление / запрос для заполнения этой модели представления:

public ActionResult Index()
{
    // Fetch the data here, depending on the ORM you are using
    // perform the necessary joins so that you have the team names
    IEnumerable<Betting.Models.Bets> model = ...

    // map the model to the view model previously defined
    IEnumerable<TeamViewModel> viewModel = ...

    // pass the view model to the view for display
    return View(viewModel);
}

наконец в представлении:

@model IEnumerable<TeamViewModel>
@{
    ViewBag.Title = "List of Games";
}
@{
    var grid = new WebGrid(source: Model, defaultSort: "EndDate", rowsPerPage: 3);    
}
<h2>Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<h2>Betting List</h2>
<div id="grid">
    @grid.GetHtml(
        tableStyle: "grid",
        headerStyle: "head",
        alternatingRowStyle: "alt",
        columns: grid.Columns(
            grid.Column("Subject"),
            grid.Column("Team1Name"),
            grid.Column("Team2Name")          
        )
    )
</div>

Что касается сопоставления между вашими моделями и моделями представления AutoMapper может значительно упростить эту задачу.

...