如何将模型构建器模型提供给表面控制器

How to give a modelsbuilder model to surface controller

我正在使用模型构建器(使用自定义工具方法)开发 Umbraco 7。我需要知道将模型传递给控制器​​的正确方法是什么。

例如,我有不同类型的页面派生自我的基本页面,我有一个要为所有这些页面生成的组件,即:一个大盒子,带有图像、文本、背景等。

我认为它是我页面上的一部分。所以我为它写了一个动作,并在我的页面上使用 IPageBase 作为输入参数调用它。但显然我不能那样做,特别是模型构建器不会为我生成无参数构造函数,如果我为我的每个页面添加部分 class 会很难看:|

我该怎么办?我只是不喜欢将我的模型转换为我视图中的视图模型

就个人而言,我更喜欢将大对象转换为较小的视图模型,然后将它们传递给部分,但如果你想在你的部分上拥有页面模型,你可以像这样传递它:

@inherits UmbracoTemplatePage<YourModelClass>

或:

@inherits UmbracoViewPage<YourModelClass>

然后您的控制器需要传递 IPublishedContent 项目 (CurrentPage) 作为模型以启用转换为所需 class .

您也可以在部分/视图本身上执行此操作(特别是如果您想要使用整个页面模型中的组合对象)。您的部分内容可能如下所示:

@inherits UmbracoTemplatePage
@{
    var seo = new SEO(Model.Content);
    if (seo != null)
    {
        <title>@seo.MetaTitle</title>
        <meta name="description" content="@seo.MetaDescription">
        <meta name="keywords" content="@seo.MetaKeywords">
    }
}

其中 SEO 是 class 组成文档类型/模型之一。当然,您也可以在控制器甚至服务内部执行此转换/创建。希望它能帮助你进一步开始玩这个。