我们目前正在将一个大型应用程序从WebForms转换为MVC。我们的应用程序有一个我们称之为动态资源的想法,我们在Sitecore中有指定资源(CSS / JS)的项目,这些项目可以附加到页面,以便在需要时可以动态更改。有了这个,我们有一个子布局(ascx)和一个渲染(cshtml)来完成在页面上获取这些资源的工作。
在动态资源(DR)模板中,我们有4个字段:
我们希望我们的代码像这样代表这个模板:
string[] ExternalCss{get;set;}
IDynamicResourceItem[] InternalCss{get;set;}
string[] ExternalJs{get;set;}
IDynamicResourceItem[] InternalJs{get;set;}
如您所知,string[]
不起作用,因为Glass Mapper代码本身并不将多行字段转换为字符串数组;它将整个字段值作为单个对象放入数组中。
我去创建了一个AbstractSitecoreFieldMapper
并注册了它,它作为MVC渲染的模型非常有用。但是,ascx并不起作用。我们通过sublayout的参数提取模板信息,我认为这是潜在的问题。但即使在我的测试中,如果我提取DR项并使用item.GlassCast
代替GetRenderingParameters
,它仍然无法正常工作。我相信MVC模型映射的管道使用AbstractSitecoreFieldMapper
而其他方法不使用。
如何通过GetRenderingParameters
正确映射?
答案 0 :(得分:0)
为什么不使用名称值列表?您可以为各种CSS / JS提供一个逻辑名称,以便在未使用的“名称”部分中更容易识别,并通过Glass为这种类型的字段进行渲染而创建的System.Collections.Specialized.NameValueCollection运行?