Передача вложенных данных из контроллера для просмотра в ASP.Net MVC (LINQ) - PullRequest
0 голосов
/ 15 января 2010

Я использую LINQ to SQL (SQL Server) в ASP.Net MVC. На моей странице должны отображаться все регионы и все офисы в каждом регионе (вложенные). Офисы принадлежат Пригороду, который, в свою очередь, принадлежит Региону. То есть В каждом регионе мне нужно взять в петле те офисы, которые существуют в пригороде и принадлежат к текущему региону.

(псевдокод)

    foreach(Region currentRegion in Regions)  
    {  
        Display Region's Heading  
        foreach(Office currentOffice in ALL OFFICES WHICH BELONG TO SUBURBS WHICH BELONG TO THIS REGION)  
        {  
             Display Office Name  
        }  
    }  

Какой самый чистый, парадигмальный способ MVC для достижения этой цели с помощью LINQ to SQL?
(Я большой поклонник SQL, но я использую LINQ to SQL для этого проекта).

Я не хочу писать 5 вспомогательных классов, просто чтобы сделать такую ​​простую вещь. Я не ищу «идеальный мир OO Overkill» решение, чистый, минималистичный и простой лучше.

В идеале я хотел бы собрать все данные в контроллере, чтобы у меня не было хаотического представления, которое пересекается с ответственностью контроллера и т. Д.

1 Ответ

0 голосов
/ 15 января 2010

В вашем случае

  • я бы создал классы моделей вида RegionModel, SuburbModel, OfficeModel.
  • Используя AutoMapper, я бы отобразил Region для RegionModel и передал его для просмотра
  • Вид будет выглядеть так (Spark) =>

    <viewdata model="RegionModel region" />
    <for each="var suburb in region.Suburbs">
        <span each="var office in suburb.Offices">${office.Name}</span>
    </for>        
    

Это ответ на вопрос «как передать вложенные данные для просмотра в asp.net-mvc?». Дело в том, что ваша модель еще не подходит для этого (класс региона не связан напрямую с пригородом, пригород с офисами).

Итак - вам нужно убедиться, что ваш Регион содержит Пригороды, а Пригород содержит Офисы. Я не уверен насчет L2S, но в nhibernate это было бы просто - коллекции будут отображаться как есть и по умолчанию - поддерживаться отложенной загрузки RegionController отвечает за правильное использование RegionRepository, а RegionRepository должен предоставлять возможность загружать пригороды и офисы по требованию.

...