Umbraco 如何将modelsbuilder模型提供给surface controller

Umbraco 如何将modelsbuilder模型提供给surface controller,umbraco,umbraco7,Umbraco,Umbraco7,我正在使用models builder(使用自定义工具方法)开发Umbraco 7。我需要知道将模型传递给控制器的正确方法是什么 例如,我有从我的基本页派生的不同类型的页面,我有一个我想要为所有这些页面生成的组件,即:一个大框,包含图像、文本、背景等 我认为这是我书页上的一部分。因此,我为它编写了一个操作,并在页面上使用IPageBase作为输入参数调用它。但显然我无法做到这一点,特别是models builder没有为我生成无参数构造函数,如果我为我的每个页面添加一个分部类,那将非常糟糕:|

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

例如,我有从我的基本页派生的不同类型的页面,我有一个我想要为所有这些页面生成的组件,即:一个大框,包含图像、文本、背景等

我认为这是我书页上的一部分。因此,我为它编写了一个操作,并在页面上使用IPageBase作为输入参数调用它。但显然我无法做到这一点,特别是models builder没有为我生成无参数构造函数,如果我为我的每个页面添加一个分部类,那将非常糟糕:|


我该怎么办?我个人不喜欢在我的视图中将我的模型转换为视图模型,我更喜欢将巨大的对象转换为较小的视图模型,然后将它们传递到部分,但是如果您想在部分中包含页面模型,可以这样传递:

@inherits UmbracoTemplatePage<YourModelClass>
@继承UmbracoTemplatePage
或:

@继承UmbracoViewPage
然后,您的控制器需要将IPPublishedContent项(CurrentPage)作为模型传递,以便能够转换到所需的类

您也可以在部分/视图本身上执行此操作(特别是如果您希望使用来自整个页面模型的合成对象)。您的部分可能看起来像:

@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">
    }
}
@继承UmbracoTemplatePage
@{
var seo=新的seo(Model.Content);
如果(seo!=null)
{
@seo.MetaTitle
}
}

其中SEO是一种组合文档类型/模型。当然,您也可以在控制器甚至服务内部执行此强制转换/创建。希望它能帮助您进一步使用它。

就我个人而言,我更喜欢将大型对象转换为较小的ViewModel,然后将它们传递到partials中,但是如果您希望在partials中包含页面模型,可以这样传递:

@inherits UmbracoTemplatePage<YourModelClass>
@继承UmbracoTemplatePage
或:

@继承UmbracoViewPage
然后,您的控制器需要将IPPublishedContent项(CurrentPage)作为模型传递,以便能够转换到所需的类

您也可以在部分/视图本身上执行此操作(特别是如果您希望使用来自整个页面模型的合成对象)。您的部分可能看起来像:

@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">
    }
}
@继承UmbracoTemplatePage
@{
var seo=新的seo(Model.Content);
如果(seo!=null)
{
@seo.MetaTitle
}
}

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

谢谢您的回复。我喜欢将巨大的物体转换成较小的物体,但我不喜欢在视图中。如何做到这一点?在SurfaceControl中,您已经注入了UmbracoContext和UmbracoHelper,因此您可以使用它们获取当前页面的详细信息,并构建viewmodel类(新的YourModelClass(CurrentPage))。您还可以使用一些映射器(例如AutoMapper)将页面模型映射到相应的视图模型(使用命名约定)。感谢您提供的好解决方案,我非常喜欢它。我还想知道,如果你来自宏,你会怎么做。有不止一种可能的情况。您可以将页面ID作为参数传递,然后使用Umbraco helper对其进行操作,或者使用与PartialView/View相同的方法进行操作,因为这里还提供了直接使用Umbraco helper的选项。感谢您的回复。我喜欢将巨大的物体转换成较小的物体,但我不喜欢在视图中。如何做到这一点?在SurfaceControl中,您已经注入了UmbracoContext和UmbracoHelper,因此您可以使用它们获取当前页面的详细信息,并构建viewmodel类(新的YourModelClass(CurrentPage))。您还可以使用一些映射器(例如AutoMapper)将页面模型映射到相应的视图模型(使用命名约定)。感谢您提供的好解决方案,我非常喜欢它。我还想知道,如果你来自宏,你会怎么做。有不止一种可能的情况。您可以将页面ID作为参数传递,然后使用Umbraco helper对其进行操作,或者使用与PartialView/View相同的方法进行操作,因为这里还有一个直接使用Umbraco helper的选项。