Возьмите вид "Детали сообщения".Составное представление, в котором отображаются «Сводка по публикациям» и «Комментарии к публикациям».
При частичном подходе вы получите:
public class PostDetailModel
{
PostSummaryModel Summary { get;set; }
PostCommentsModel Comments { get;set; }
}
и представление:
<div id="post_detail">
@Html.Partial("Summary", Model.Summary)
<ul class="comment-list">
@foreach(var comment in Model.Comments)
{
<li>@Html.Partial("Comment", comment)</li>
}
</ul>
</div>
Это означает, что метод PostController.Detail будет отвечать за построение PostSummaryModel, построение PostCommentsModel и выбор того, какие партиалы использовать для рендеринга каждого.
Если у вас также тогда была следующая модель:
public class PostListModel
{
ICollection<PostSummaryModel> Posts { get;set; }
}
У вас будет два действия, отвечающих за построение PostSummaryModel и знание того, какой частичный элемент использовать.Если ваше приложение не структурировано должным образом, это может привести к дублированию кода доступа к данным / модели.Но если вы делегируете и абстрагируете построение модели в фабрики моделей многократного использования (которые могут быть вызваны обоими действиями), вы минимизируете этот риск.
С другой стороны, используя подход Html.Action, ваша модель просто становится:
public class PostDetailModel
{
int PostId { get;set; }
}
и представление:
<div id="post_detail">
@Html.Action("Summary", new { Model.PostId })
@Html.Action("Comments", new { Model.PostId })
</div>
Затем можно оставить действия «Сводка» и «Комментарии», чтобы создать собственную модель и выбрать представление.
Однако при выборе подхода Html.Action наблюдается очень незначительное снижение производительности, поскольку ASP.NET MVC должен пройти через весь процесс связывания модели, выполнения фильтров действий, проверки и т. Д., Поэтому вы, вероятно, не будете использовать Html..Действие по отображению элементов в достаточно длинном списке.Но для создания составного представления это может быть действительно чистый способ склеить полдюжины или около того существующих представлений.