Передача вложенных данных из контроллера в представление в ASP.Net MVC (LINQ)

Я использую 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 вспомогательных классов только для того, чтобы делать такую ​​простую вещь. Я не ищу "идеального мирного объектно-ориентированного решения", чистое, минималистичное и простое - лучшее.

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


person Aaron    schedule 15.01.2010    source источник
comment
Не могли бы вы уточнить формат этих данных, где они хранятся и как извлекаются?   -  person    schedule 15.01.2010


Ответы (1)


В твоем случае,

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

    <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 должен предоставлять возможность загружать пригороды и офисы по запросу.

person Arnis Lapsa    schedule 15.01.2010
comment
Привет, Арнис! Спасибо за ответ. Хотя я уверен, что Spark и AutoMapper - фантастические надстройки, мне интересно узнать, как это можно сделать с помощью чистого / необработанного ASP.Net MVC на данном этапе. Я хочу сначала получить свои знания в этой области, прежде чем я начну изучать еще больше классов / надстроек и т. Д. Я обнаружил, что чем больше надстроек, которые вы добавляете в свое решение, часто может закончиться увеличением накладных расходов на обслуживание через 2-3 года, когда часть вашего решения будет обновлена, и внезапно некоторые из надстроек могут оказаться неподдерживаемыми или несовместимыми и т. д. - person Aaron; 17.01.2010
comment
Ничего особенного не изменится - синтаксис представления будет немного более подробным, а отображение будет выполнено для создания моделей представления с помощью конструкторов или инициализаторов объектов. - person Arnis Lapsa; 17.01.2010