Вот хорошее объяснение , почему @Html.Action(..)
было удалено в проблеме GitHub здесь: Почему был удален @ Html.Action? .
Мы удалили их, потому что придумали, как нам показалось, общую улучшенную функцию под названием View Components.
Учитывая этот совет, ясно, что рекомендация для вашего примера будет заключаться в создании View.Компонент , который будет называться TopNavViewComponent
по соглашению.
ViewComponents / TopNavViewComponent.cs
public class TopNavViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
// Code to instantiate the model class.
var yourModelClass = ...
return View(yourModelClass);
}
}
Вызов View
ищетDefault.cshtml
Файл бритвы в известном месте.Вот пример того, как этот файл будет выглядеть (его предполагаемое расположение выделено жирным шрифтом):
Shared / ViewComponents / TopNav / Default.cshtml
@model YourModelClassType
@*
Your HTML, etc.
Standard Razor syntax and HTML can be used here.
*@
InЧтобы использовать этот новый компонент представления, вы можете добавить следующее в Layout
представление, где бы вы ни хотели, чтобы вывод выводился:
Shared / _Layout.cshtml
@await Component.InvokeAsync("TopNav")
Этого должно быть достаточно, чтобы начать работу с View Components.Несколько других полезных вещей:
- Компоненты представления поддерживают внедрение зависимостей.
- Аргументы могут быть переданы в компонент View при вызове
InvokeAsync
.