Я понимаю, что частичные представления используются для визуализации частей представления. Но я не могу понять, в чем разница между return View()
и return PartialView()
и когда вы используете их.
Какая разница между "return View()" и "return PartialView()"
Ответ 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
внутри основного вида.