繁体   English   中英

如何在 .NET Core 的主布局视图中呈现特定控制器的动作?

[英]How to render action of specific controller in master Layout view in .NET Core?

我从Layout主视图中调用"TopNav"部分。

我希望TopNav视图是强类型的,并且要在TopNavController创建模型。

有没有办法从主视图中呈现特定控制器的动作? 因此,在这种情况下,我需要呈现TopNav的行动TopNavControllerLayout

到目前为止,我只能使用例如。 @Html.Partial("TopNav")@Html.RenderPartial("TopNav")带有传递模型的选项,但我需要在控制器中实例化模型。

在以前的版本中曾经有Html.Action("Action", "Controller")助手,但在 .NET Core 中似乎不再可用。

这里有一个很好的解释为什么@Html.Action(..)在 GitHub 问题中被删除: Why was @Html.Action removed? .

我们删除了它们,因为我们想出了一个整体更好的特性,称为视图组件。

鉴于该建议,很明显,您的示例的建议是创建一个View ComponentTopNavViewComponent约定将其命名为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。 需要了解的其他一些有用的信息是:

  1. 视图组件支持依赖注入。
  2. 调用InvokeAsync时,可以将参数传递到视图组件中。

我不会在这里讨论这两个功能,因为它们都包含在文档中,并且超出了这个问题的范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM