MVC и partials это не нарушает шаблон MVC? - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть частичное представление, которое отображает параметры поиска, такие как поиск по категории, региону, дате и т. Д. Это существует на каждой странице. Частичное использование модели представления, содержащей списки регионов, кошек и т. Д.

Поскольку это используется на каждой странице - мне нужно загружать эти свойства в модель представления при каждом действии в моих контроллерах, чтобы обеспечить доступность данных для частичного представления. Не очень доволен этим. (Просто использовали унаследованные модели представления)

Я вижу, что частичное может вызвать метод рендерации на контроллере для получения данных, но теперь у меня будет представление, вызывающее данные из контроллера - нарушающее шаблон mvc.

что другие люди делают в этой ситуации?

Ответы [ 2 ]

2 голосов
/ 25 февраля 2010

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

Например:

public class RequiresSearchOptions : ActionFilterAttribute {
    public override void OnResultExecuting(ResultExecutingContext filterContext){
        filterContext.Controller.ViewData["SearchOptions"] =
            GetSearchOptions();

        //Or manipulate the model :
        //YourViewModel m = 
        //    (YourViewModel)filterContext.Controller.ViewData.Model;
        //m.SearchOptions = GetSearchOptions();
    }
}

А потом украсьте свои действия / контроллеры.

[RequiresSearchOptions]
public ActionResult Index() {
    return View();
}
//or
[RequiresSearchOptions]
public class HomeController : Controller {
    //Actions
}
1 голос
/ 25 февраля 2010

Некоторое время я использовал частичные запросы для рендеринга повторно используемых виджетов. По моему мнению, это более MVC-способ визуализации виджетов через RenderAction, поскольку они не требуют, чтобы View знал, какое действие вызывается.

Мои частичные запросы отображают частичные представления, поэтому ваш существующий код может быть легко перенесен. Они также могут выводиться в кеш-память так же, как и любое действие asp.net mvc.

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

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