MVC Html.Partial или Html.Action

Я новичок в asp.net MVC, поэтому, пожалуйста, потерпите меня. Мне нужно создать меню, которое повторяется в нескольких представлениях. Что лучше послужит цели Html.Action ИЛИ Html.Partial.


person developer747    schedule 01.08.2012    source источник
comment
Без дополнительной информации Html.Partial. Поместите содержимое меню в частичное представление и вызовите его с помощью @Html.Partial("partialViewName")   -  person MisterIsaak    schedule 01.08.2012
comment
Действие делает гораздо больше (потенциально), чем просто возвращает представление. Предположим, вы хотите подсчитывать (регистрировать) каждый раз, когда меню создается (или регистрировать, кто запросил меню, или какое меню он запросил). Суть будет та же — статическое меню div в html. Но результата бы не было.   -  person LongChalk    schedule 13.08.2018


Ответы (2)


Вот что я считаю своими рекомендациями по использованию Html.Action или Html.Partial.

Html.Partial

  1. Используйте Html.Partial при рендеринге статического контента или,
  2. Если вы собираетесь передавать данные из ViewModel, которые отправляются в основное представление

Html.Действие

  1. Используйте Html.Action, когда вам действительно нужно получить дополнительные данные с сервера для заполнения частичного представления.

В основном, если он статичен, используйте Html.Partial(). Если динамические, независимые от модели данные, используйте Html.Action(). Вероятно, есть и другие сценарии, но это даст вам хорошее представление о том, куда и как идти. Html.RenderPartial() и Html.RenderAction() взаимозаменяемы для функций с аналогичными именами выше.

person Tommy    schedule 01.08.2012
comment
Хорошее объяснение +1 для вас. - person Pamma; 05.11.2013
comment
Имейте в виду, что если приложение имеет несколько циклов через контроллеры, это может немного затруднить определение того, что происходит для данного действия, поскольку Html.Action() возвращает потенциально другой контроллер. В зависимости от ваших реализаций/зависимостей это также может быть дорого, и Фильтры могут быть альтернативой в некоторых случаях. - person Cornelius; 21.08.2014
comment
+1 за идеи действий для динамических по одной простой причине (для меня): рендеринг контента с помощью контроллера означает, что он может отображаться независимо от содержащего его представления. Это означает, что представление может отображаться, а затем, если вы хотите, чтобы страница обновляла его, вы можете сделать ajax-вызов того же (частичного) действия контроллера и использовать результат для обновления контейнера. - person C.List; 05.01.2016

Html.Partial: рендеринг частичного представления без предварительного нажатия на действие контроллера. См.: Частичные представления

Html.Action Вызовите Действие контроллера, которое может вернуть представление/частичное представление (а может и нет, оно может вызвать HttpNotFound или вернуть Json , или другие вещи).

Требуется ли для вашего меню модель представления или оно статично?

Если это статическое меню, Html.Partial подойдет вам. Поместите содержимое статического меню внутрь частичного представления и вызовите Html.Partial там, где вы хотите его отобразить.

Если меню создается на основе модели представления, вы можете использовать либо Html.Partial, либо Html.Action:

Связывание модели представления с помощью Html.Partial:

public class MenuViewModel {
    // menu data goes here
}

public class GeneralViewModel : MenuViewModel {
    // general view info goes here
}

public ActionResult Index() {
    return View(new GeneralViewModel());
}

// View Code
@model GeneralViewModel
<div>@Html.Partial("_partialName", model)</div>

Здесь мы передаем полную модель представления представлению, а представление вызывает Partial и передает свою модель частичному представлению.

** Разделение модели с помощью Html.Action:**

public ActionResult Index() {
    return View(new GeneralViewModel());
}

public ActionResult MenuView() {
    return PartialView(new MenuViewModel());
}

// View Code
@model GeneralViewModel
<div>@Html.Action("MenuView")</div>

Здесь представление вызывает действие контроллера MenuView, которое создает новую модель представления и передает ее партиалу.

person Jesse Hallam    schedule 01.08.2012