我已经尝试使用强类型模型(将Umbraco.ModelsBuilder.ModelsMode
设置为AppData
或Dll
)一段时间了,但我从未完全理解它是如何工作的。
我已经更改了Umbraco.ModelsBuilder.ModelsMode
的值,并在后台ModelsBuilder中生成了模型,然后我将App_DataModels
包含在Visual Studio中,但接下来呢?
@inherits Umbraco.Web.Mvc.UmbracoTemplatePage<ContentModels.Home>
@using Our.Umbraco.Vorto.Models;
@using Our.Umbraco.Vorto.Extensions;
@using ContentModels = Umbraco.Web.PublishedContentModels;
这是我的主页视图的代码。无论我尝试什么,我都无法从内容中访问@Model.PROPERTY
或@CurrentPage.PROPERTY
。我可以在MODEL.generated.cs
文件中看到不同的属性。
为了做@Model.PROPERTY
之类的事情,我需要采取哪些步骤?
好吧,在最新的7.6.9版本(或者7.6.8)中似乎有一些变化。这就是我现在必须做的:
<add key="Umbraco.ModelsBuilder.Enable" value="true" />
<add key="Umbraco.ModelsBuilder.ModelsMode" value="Dll" />
然后我可以去后台生成模型。模型包含在项目中(位置:~App_DataModels
)。还必须包括来自~bin
文件夹的Umbraco.Web.PublishedContentModels.dll
。
然后,我想,由于.NET Core的原因,当我尝试加载应用程序时出现了一个错误,上面写着:
多个类型希望成为内容类型文件的模型
这是因为我在~bin
中包含了所有,这意味着我还包含了Project.dll
、Project.dll.config
和Project.pdb
文件。显然,Project.dll
文件也包含相同的模型,所以我不得不排除这3个文件。
现在它很简单,我现在可以完美地完成@Model.Content.PROPERTY
了。
您谈论的不是"动态"模型,而是ModelsBuilder生成的强类型模型。默认情况下,Umbraco附带PureLive设置,该设置将模型保存在内存中并动态生成模型。它可以被认为是"动态的"。
该工具及其行为在这里有很好的记录:https://github.com/zpqrtbnk/Zbu.ModelsBuilder/wiki
关于它的模式,你可以在这个地方找到它的所有信息:https://github.com/zpqrtbnk/Zbu.ModelsBuilder/wiki/Builder-Modes
但是,在回答您的问题时,在您更改配置后,您需要编译您的应用程序,因为您需要将这些类保留在运送网站的DLL中。您还可以直接从Umbraco Backoffice中的开发人员面板重新生成模型。
你需要记住,如果你想使用DLL、LiveDLL或PureLive配置,你需要去掉在AppData或任何其他与此模式一起使用的目录中生成的类,因为你会遇到"多个类型希望成为内容类型文件的模型"的错误
之后,您应该能够通过Model.Content.PropertyAlias访问文档类型的所有属性。您可能错过了Content对象,它是文档的强类型IPublishedContent表示形式。
希望它能帮助你让它发挥作用:)