Как передать заголовок для представления, которое использует коллекцию Linq - PullRequest
0 голосов
/ 12 октября 2010

Я изучаю Linq и MVC2, я делаю успехи, но я немного застрял в том, как мне получить описание страницы в View, использующем коллекцию.

В моем контроллере у меня есть следующая конструкция

public ActionResult Group(int id)
{
    var result = (from d in db.ErrorDetails.Where(r => r.ErrorTerminal.ErrorTerminalGroupID == id)
                  orderby d.ErrorTerminal.TerminalNumber ascending, d.ErrorRecordedAt descending
             select d);

    return View(result);
}

и на мой взгляд

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>????? how to get a title from the 1st record?????</h2>
<table>
<%
        foreach (var item in Model) {
%>
//code for setup of the rows etc
<% }%>
</table>

Как мне получить Заголовок из запроса Linq, который я сделал, ИЛИ мне нужно сделать ViewModel для размещения этого?

Ответы [ 3 ]

2 голосов
/ 12 октября 2010

Я бы создал ViewModel для размещения вашего заголовка, так что тот факт, что ваш заголовок получен из первого элемента вашего списка, отделен от кода страницы, а код вашей страницы содержит только логику представления.

0 голосов
/ 12 октября 2010

Пожалуйста, не передавайте IEnumerable<T> s на ваш взгляд. Вместо этого рассмотрите возможность использования List<T> и выполните первое перечисление в контроллере. Я рекомендую этот шаблон только для ViewModels, потому что вы можете поймать исключение при первом перечислении в коде вашего контроллера и не позволить ужасно отрисовать представление и привести к частичному выводу HTML, потому что контроллер испортил и пропустил представление, чего не мог полностью перечислить.

При этом лучший подход - использовать ViewModel и иметь свойства дома string Title и List<ErrorDetail> ErrorDetails.

public class GroupErrorDetailsViewModel
{
    public string Title { get; set; }
    // NOTE: assuming db.ErrorDetails is of type Table<ErrorDetail>
    public List<ErrorDetail> ErrorDetails { get; set; }
}

public ActionResult Group(int id)
{
    // FIXME: this direct database query should not really be in the controller
    var result =
        from d in db.ErrorDetails
        where d.ErrorTerminal.ErrorTerminalGroupID == id
        orderby d.ErrorTerminal.TerminalNumber ascending, d.ErrorRecordedAt descending
        select d;

    var resultList = result.ToList();

    var viewModel = new GroupErrorDetailsViewModel
    {
        Title = resultList.Count > 0 ? resultList[0].Title : "Default Title",
        ErrorDetails = resultList
    };

    return View((object)viewModel);
}
0 голосов
/ 12 октября 2010

Как это:

<%= Html.Encode(Model.First().Title) %>

Если нет предметов, это приведет к исключению.

Если вам нужен заголовок, которого нет в первом элементе, вам нужно использовать класс ViewModel со свойством Title.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...