Подтвердить что ты не робот

Когда вы используете Html.Action над Html.Partial

Я все еще не получаю основной цели Html.Action в asp.net mvc. Я использовал Html.Partial каждый раз, когда мне нужно было загрузить частичный вид или захотелось разделить код на вид, чтобы очистить его.

Где Html.Action вписывается во все это (например, где вы хотите использовать Html.Action и не использовать Html.Partial)?

Edit

Кажется, что ответы на использование Html.Action для динамических данных. Я не получаю это, так как вы также можете использовать Partial Views для динамических данных.

Например, если пользователь на моем сайте редактирует строку. Ajax-вызов выполняется методом, и я беру эту строку из db. Затем я возвращаю parital view формы, которая имеет все данные, готовые для редактирования. Если возникает ошибка, я возвращаю результат json с помощью метода ошибки, и мой javascript потребляет его и предупреждает пользователя.

Если все хорошо, отображаемый html помещается в диалог jquery и отображается пользователю.

Это потому, что вы можете использовать "ChildActionOnlyAttribute", который заставляет людей использовать Action вместо этого?

4b9b3361

Ответ 1

У Ankur есть правильная идея, но я считаю, что вы действительно можете упростить концепцию.

Для меня это сводится к тому, что по сравнению с тем, как

Если вы знаете , что, которое вы хотите визуализировать, но не , как, вероятно, вы будете использовать частичное, чтобы определить, как визуализировать информацию. Например, может быть, ваша модель просмотра предназначена для счета-фактуры. Вероятно, у вас есть модель просмотра счетов, которая уже имеет всю необходимую информацию о самом счете, включая, возможно, перечисление позиций в счете. Частично может быть хорошим выбором для позиций, чтобы он сам содержался. У вас уже есть сведения о позициях (что), но частичная обработка будет обрабатываться как это делается ( как)

С другой стороны, может быть, ваша модель счета-фактуры имеет идентификатор клиента на нем, но не содержит фактических данных о клиенте. Здесь у вас нет того, что, поэтому вы должны передать идентификатор клиента в действие и получить какие данные, которые ему нужны, и передать их просмотр для рендеринга , как кажется подходящим.

Итак, если у вас уже есть все данные, с которыми вы хотите работать, просто придерживайтесь Partial, но если вам не хватает информации, которую вам нужно получить, Action будет лучше.

Если это становится действительно нечетким по краям, это когда частичный вид включает возможность извлечения его собственных данных через Ajax (или другие технологии). В этом случае вы могли бы уйти от частичной части детали Customer в моем примере, Partial и получить необходимые данные. Используя Ajax после получения ответа клиентом. Но это больше для вас, если такая вещь даже имеет смысл для вашей реализации.

Добавление: Стоит отметить, что, если вы решите попробовать ASP.NET MVC Core, ChildActions больше не доступны. В этом случае ваш выбор будет ограничен частичными видами, ajax или недавно введенной функцией Components. Последний из них похож на ChildActions, но немного отличается в том, как они реализованы.

Ответ 2

Возможно, этот пример станет более понятным.

Скажем, у вас есть меню, которое появляется на каждой странице, поэтому вы помещаете его в свой макет. Меню никогда не изменится - есть только некоторые основные навигационные ссылки: "Главная", "О нас", "Контакты" и т.д., Поэтому вы просто используете обычный частичный вид. Это будет работать нормально - поскольку контент статичен - вам не нужно обращаться к базе данных для получения данных. Вы можете просто использовать @Html.Partial("Menu");.

Позже вы решите, что вам нужно изменить меню, чтобы он получал все ссылки из базы данных. Вы обновляете частичный вид, чтобы иметь модель, которая является List<string> - по одному для каждой ссылки.

Теперь, если вы все еще хотите просто использовать Partial View, каждое действие должно запрашивать базу данных, чтобы получить список ссылок, и каждая модель для каждого представления должна иметь свойство List<string> для ссылок, так что он может передать это в частичный вид меню. Это была бы плохая идея.

Вместо этого вы создадите новое дочернее действие GetMenuLinks() - это запросит базу данных, чтобы получить ссылки как List<string>, и передать это в частичный вид. Это заставляет Child Action отвечать за получение собственных данных. Это означает, что вам нужен только этот запрос в одном месте, например, действие "О нас" не нужно беспокоиться о получении списка ссылок для меню.

Ответ 3

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

Действия ребенка  Использование для создания элементов управления или виджетов пользовательского интерфейса, которые должны содержать бизнес логика. Когда вы используете дочернее действие, он вызывает метод действия, просматривать и вводить результат в поток ответов.

Ответ 4

Я использую Html.Action() для загрузки содержимого dynaimc, который я не хочу содержать в модели представления (например, информация пользователя на боковой панели). Это очень полезно для того, чтобы поддерживать идентичные модели ввода и вывода.

Обратите внимание, что я всегда использую Html.Action() в сочетании с применением метода ChildActionOnlyAttribute к методу контроллера, который я вызываю, чтобы фрагмент HTML не был доступен через URL-адрес.

Ответ 6

Используйте Html.Partial, если вам требуется подмножество модели вашего представления для отображения рассматриваемого раздела - обычно это то, что связано с тем, над чем вы работаете. Если это может быть подразделение формы, соответствующий фрагмент контента, относящийся к основному виду и т.д. Частичный получает свою модельную информацию из родительского представления.

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