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

Какая разница между "return View()" и "return PartialView()"

Я понимаю, что частичные представления используются для визуализации частей представления. Но я не могу понять, в чем разница между return View() и return PartialView() и когда вы используете их.

4b9b3361

Ответ 1

Возврат View() - отображает страницу .aspx |.cshtml

  • Отображает обычную страницу .aspx, которая также может содержать частичные представления

Возврат PartialView() - Renders.ascx |.cshtml Контроль

  • Отображает сегмент HTML в браузере, который может запрашиваться через запросы AJAX или Non-AJAX.

View() возвращает ViewResult PartialView() возвращает PartialViewResult оба наследуют от ViewResultBase

Разница описывается Reflector ниже...

public class PartialViewResult : ViewResultBase
{
   // Methods
   protected override ViewEngineResult FindView(ControllerContext context)
   {
      ViewEngineResult result = base.ViewEngineCollection.FindPartialView(context, base.ViewName);
      if (result.View != null)
      {
         return result;
      }
      StringBuilder builder = new StringBuilder();
      foreach (string str in result.SearchedLocations)
      {
         builder.AppendLine();
         builder.Append(str);
      }
      throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_PartialViewNotFound, new object[] { base.ViewName, builder }));
   }
}


public class ViewResult : ViewResultBase
{
   // Fields
   private string _masterName;

   // Methods
   protected override ViewEngineResult FindView(ControllerContext context)
   {
      ViewEngineResult result = base.ViewEngineCollection.FindView(context, base.ViewName, this.MasterName);
      if (result.View != null)
      {
         return result;
      }
      StringBuilder builder = new StringBuilder();
      foreach (string str in result.SearchedLocations)
      {
         builder.AppendLine();
         builder.Append(str);
      }
      throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture, MvcResources.Common_ViewNotFound, new object[] { base.ViewName, builder }));
   }

   // Properties
   public string MasterName
   {
      get
      {
         return (this._masterName ?? string.Empty);
      }
      set
      {
         this._masterName = value;
      }
   }
}

Ответ 2

return PartialView() возвращает фрагмент кода HTML и используется с файлами ViewUserControls - ASCX. Основное преимущество использования "return PartialView()" - это когда вы не хотите отображать все другие элементы HTML-страницы, такие как HTML, теги BODY, HEAD.

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

Итак, у меня есть вид под названием MyControl.aspx, где я использую помощник HTML RenderPartial, и у меня есть частичный вид с именем MyControl.ascx, где я делаю фактический рендеринг.

Я могу переключаться между этими двумя в моем действии контроллера следующим образом:

if (Request.IsAjaxRequest())
    return PartialView("MyControl"); // this renders MyControl.ascx

return View(); // this render MyControl.aspx

Ответ 3

Действие контроллера обычно возвращает PartialView, когда используется AJAX, и выполняется обновление области страницы, представленной частичным представлением. Обычный способ использования частичных представлений - просто вызвать Html.RenderPartial внутри основного вида.