Asp net MVC контроллеры и виджеты - PullRequest
0 голосов
/ 06 апреля 2010

Насколько я понимаю, в ASP.NET MVC httprequest сопоставляется с контроллером / действием.

  • Поскольку для получения одной веб-страницы используется один запрос, можем ли мы вызвать эти контроллеры "page controllers"?

Мой другой вопрос касается виджетов (пользовательских элементов управления) и RenderPartial метода:

  • Если виджет представляет собой классический ASP.NET webcontrol или usercontrol, и я хочу отобразить этот виджет на многих страницах, как можно избежать повторения логики виджета, если эта логика находится в " page controller "?

Ответы [ 3 ]

1 голос
/ 06 апреля 2010

Поскольку для получения одной веб-страницы используется один запрос, можем ли мы назвать эти контроллеры «контроллерами страниц»?

Зачем тебе? Они названы контроллерами. В конце концов, действие на контроллере не обязательно обслуживает «веб-страницу», оно может отвечать, используя данные JSON, XML, RSS или только часть веб-страницы («контроль», если хотите).

Если виджет представляет собой классический asp.net webcontrol или usercontrol, и я хочу отображать этот виджет на многих страницах, как можно избежать повторения логики виджета, если эта логика находится в «контроллере страниц»?

  1. Убедитесь, что ваша (бизнес) логика не находится в контроллере: она там не принадлежит. Работа контроллера заключается в том, чтобы отображать ввод / вывод, а не обрабатывать логику.
  2. Представления, содержащие ваш виджет, должны иметь ViewModel, который содержит ViewModels, необходимые для виджетов, например,

-

MainViewModel
{
    UserWidgetViewModel UserViewModel;
    List<Foo> Bar;
    // ...
}

UserWidgetViewModel 
{
    string UserName;
    int Reputation;
    //...
}

Сначала я почувствовал, что это некрасиво, но я уже некоторое время пользуюсь этим и считаю, что он прекрасно инкапсулирует необходимые данные.

Надеюсь, это поможет

0 голосов
/ 06 апреля 2010

Вы можете попробовать контроллер виджетов . Он использует новый метод Html.RenderAction в .NET MVC 2. Да, он технически нарушает чистый шаблон mvc (хорошо сделанный MS), но для практических целей он может оказаться весьма полезным.

0 голосов
/ 06 апреля 2010

хмм Я думаю, вам нужно пересмотреть свое понимание контроллеров. Контроллер имеет несколько методов. Это не контроллер, который отображается на странице, а ActionMethods.

При вызове RenderPartial он вводит соответствующий ActionMethod (и этот метод может быть на любом контроллере), который возвращает PartialView (.ascx), визуализированный в месте, которое вы вызвали, в вызывающем представлении (.aspx или другом .ascx). если у вас есть несколько уровней частичных просмотров). Никакой логики там не дублируется ... Или, может быть, я не понимаю ваш вопрос?

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