如何在 .NET Core 的主布局视图中呈现特定控制器的动作?
How to render action of specific controller in master Layout view in .NET Core?
我正在从 Layout
主视图中调用 "TopNav"
部分。
我希望 TopNav
视图是强类型的,并希望在 TopNavController
中创建模型。
有什么方法可以从主视图中呈现特定控制器的动作吗?所以在这种情况下,我需要在 Layout
.
中呈现 TopNavController
的 TopNav
动作
到目前为止我只能使用例如。 @Html.Partial("TopNav")
或 @Html.RenderPartial("TopNav")
可以选择传递模型,但我需要在控制器中实例化模型。
以前的版本中曾经有 Html.Action("Action", "Controller")
帮助程序,但在 .NET Core 中似乎不再可用。
@Html.Action(..)
在 GitHub 问题中被删除的原因有一个很好的解释:Why was @Html.Action removed?.
We removed them because we came up with what we felt was an overall better feature called View Components.
鉴于该建议,很明显,您的示例的建议是创建一个 View Component,按照惯例将其命名为 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 文件。这是该文件的示例(其预期位置以粗体显示):
Shared/Components/TopNav/Default.cshtml
@model YourModelClassType
@*
Your HTML, etc.
Standard Razor syntax and HTML can be used here.
*@
要使用这个新的视图组件,请将以下内容添加到您的 Layout
视图中,无论您希望在何处呈现输出:
Shared/_Layout.cshtml
@await Component.InvokeAsync("TopNav")
这应该足以让您开始使用视图组件。其他一些有用的知识是:
- 视图组件支持依赖注入。
- 调用
InvokeAsync
时可以将参数传递给视图组件。
我不会在这里讨论这两个功能,因为它们都包含在文档中并且超出了这个问题的范围。
我正在从 Layout
主视图中调用 "TopNav"
部分。
我希望 TopNav
视图是强类型的,并希望在 TopNavController
中创建模型。
有什么方法可以从主视图中呈现特定控制器的动作吗?所以在这种情况下,我需要在 Layout
.
TopNavController
的 TopNav
动作
到目前为止我只能使用例如。 @Html.Partial("TopNav")
或 @Html.RenderPartial("TopNav")
可以选择传递模型,但我需要在控制器中实例化模型。
以前的版本中曾经有 Html.Action("Action", "Controller")
帮助程序,但在 .NET Core 中似乎不再可用。
@Html.Action(..)
在 GitHub 问题中被删除的原因有一个很好的解释:Why was @Html.Action removed?.
We removed them because we came up with what we felt was an overall better feature called View Components.
鉴于该建议,很明显,您的示例的建议是创建一个 View Component,按照惯例将其命名为 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 文件。这是该文件的示例(其预期位置以粗体显示):
Shared/Components/TopNav/Default.cshtml
@model YourModelClassType
@*
Your HTML, etc.
Standard Razor syntax and HTML can be used here.
*@
要使用这个新的视图组件,请将以下内容添加到您的 Layout
视图中,无论您希望在何处呈现输出:
Shared/_Layout.cshtml
@await Component.InvokeAsync("TopNav")
这应该足以让您开始使用视图组件。其他一些有用的知识是:
- 视图组件支持依赖注入。
- 调用
InvokeAsync
时可以将参数传递给视图组件。
我不会在这里讨论这两个功能,因为它们都包含在文档中并且超出了这个问题的范围。