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

ASP.NET MVC ViewResult vs PartialViewResult

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

4b9b3361

Ответ 1

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

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

и действие

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

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

<div>
   <%= DateTime.Now.ToString() %>
</div>

Ответ 2

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

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

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

Ответ 3

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

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

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

  • для ViewResult, это в ViewLocationFormats и MasterLocationFormats
  • для PartialViewResult, в PartialViewLocationFormat

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

то есть все.

Ответ 4

Существует несколько случаев, когда вы хотите разбить свой вид на несколько небольших компонентов. Один из вариантов использования, с которым я сейчас работаю, заключается в том, что у меня есть многоязычный сайт, который я бы хотел перезагрузить с помощью принципов 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, а не обрабатывать точки данных индивидуально. Это означает, что будет больше контента, идущего вниз по трубе. Однако компромисс легче читать и поддерживать код.

Ответ 5

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