[英]How to render action of specific controller in master Layout view in .NET Core?
我从Layout
主视图中调用"TopNav"
部分。
我希望TopNav
视图是强类型的,并且要在TopNavController
创建模型。
有没有办法从主视图中呈现特定控制器的动作? 因此,在这种情况下,我需要呈现TopNav
的行动TopNavController
的Layout
。
到目前为止,我只能使用例如。 @Html.Partial("TopNav")
或@Html.RenderPartial("TopNav")
带有传递模型的选项,但我需要在控制器中实例化模型。
在以前的版本中曾经有Html.Action("Action", "Controller")
助手,但在 .NET Core 中似乎不再可用。
这里有一个很好的解释为什么@Html.Action(..)
在 GitHub 问题中被删除: Why was @Html.Action removed? .
我们删除了它们,因为我们想出了一个整体更好的特性,称为视图组件。
鉴于该建议,很明显,您的示例的建议是创建一个View Component , TopNavViewComponent
约定将其命名为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
Razor 文件。 这是该文件的外观示例(其预期位置以粗体显示):
共享/组件/TopNav/Default.cshtml
@model YourModelClassType
@*
Your HTML, etc.
Standard Razor syntax and HTML can be used here.
*@
要使用这个新的视图组件,请将以下内容添加到您的Layout
视图中,无论您希望在何处呈现输出:
共享/_Layout.cshtml
@await Component.InvokeAsync("TopNav")
这应该足以让您开始使用 View Components。 需要了解的其他一些有用的信息是:
InvokeAsync
时,可以将参数传递到视图组件中。我不会在这里讨论这两个功能,因为它们都包含在文档中,并且超出了这个问题的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.