ASP.NET MVC ViewResult против PartialViewResult - PullRequest
57 голосов
/ 23 января 2009

В чем разница между результатами контроллера с именами ViewResult и PartialViewResult? Что еще более важно, когда используется PartialViewResult?

Ответы [ 5 ]

52 голосов
/ 23 января 2009

PartialViewResult используется для визуализации частичного представления (например, просто пользовательский элемент управления). Это довольно изящно для AJAX, т.е.

<script type="text/javascript">
    $.get(
        "/MyController/MyAction",
        null,
        function (data) { $("#target").html(data) }
     );
</script>

и действие

public ActionResult MyAction() 
{
    return PartialView("SomeView");
}

где SomeView - это пользовательский элемент управления MVC, например ::100100

<div>
   <%= DateTime.Now.ToString() %>
</div>
30 голосов
/ 23 января 2009

http://msmvps.com/blogs/luisabreu/archive/2008/09/16/the-mvc-platform-action-result-views.aspx

На практике вы будете использовать PartialViewResult для вывода небольшая часть вида. Вот почему ты нет параметров главной страницы когда имеешь дело с ними. С другой стороны, вы будете использовать ViewResult для получить «полный» вид. Как и ты можно ожидать, класс контроллера выставляет несколько методов, которые позволят Вы уменьшаете количество печатания необходимо для мгновенного эти типы результаты действий.

Вообще говоря, ViewResult предназначен для визуализации страницы с необязательным master, а PartialViewResult используется для пользовательских элементов управления (вероятно, отвечающих на запрос AJAX).

19 голосов
/ 15 октября 2014

ни один из существующих ответов на самом деле не отвечает на вопрос "В чем разница".

Различия заключаются в следующем:

1) места, где механизм просмотра попытается найти представление:

  • для ViewResult, оно находится в форматах ViewLocation и MasterLocationFormats
  • для PartialViewResult, он находится в PartialViewLocationFormats

2) ViewResult имеет дополнительное свойство MasterName

это все.

7 голосов
/ 23 марта 2011

Есть несколько случаев, когда вы хотели бы разбить ваш взгляд на несколько небольших компонентов. Один из вариантов использования, с которым я сейчас работаю, - это многоязычный сайт, на котором я хотел бы перезагрузить контент, используя принципы AJAX.

Обычно, что бы я сделал в случае неязыкового сайта, это создать еще один ActionResult для возврата ViewModel, который изменяется с новыми параметрами. Мне нравится использовать пользовательский ActionResult, который я назвал JsonpResult. Проблема заключается в том, что у меня есть ярлыки не в моей базе данных, а в файлах ресурсов. Поэтому мне нужно как-то гидрировать данные моего файла ресурсов в ViewModel.

Как только данные поступают по конвейеру, мой обратный вызов AJAX обрабатывает передачу ответа ViewModel обратно на страницу HTML с использованием Javascript (я использую jQuery).

Это определенно работает, однако это становится вопросом ремонтопригодности. Теперь мне нужно не только поддерживать исходное представление ASP.NET, но и поддерживать набор сценариев, которые обрабатывают поведение AJAXian. Если вам нужен SEO для вашего сайта, вам нужно убедиться, что и на стороне сервера, и на стороне клиента работают одинаково.

Именно здесь для меня вступают в игру частичные представления. Что я делаю, так это «вытаскиваю» логические разделы данных, где происходит большая часть перезагрузки. Приятной особенностью PartialView является то, что вы можете передавать свои ViewData и Model вместе с PartialView. Если ваш PartialView строго типизирован по отношению к вашей ViewModel, вы можете получить Intellisense, чтобы помочь с подключением PartialView.

Теперь все, что мне нужно сделать с моим вызовом AJAX, - это записать ответ обратно в один DIV, а не обрабатывать отдельные точки данных. Это значит, что по трубе будет больше контента. Однако компромисс легче читать и поддерживать код.

0 голосов
/ 14 мая 2016

Одним из основных отличий является то, что PartialViewResult не использует _ViewStart.cshtml. Код из файла _ViewStart.cshtml выполняется в начале рендеринга перед любым кодом в представлении.

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