基于字典的定制属性类型
我一直在使用EPiServer 7 MVC,并通过Joel Abrahamsson的合金MVC模板。 在看了自定义的预览控制器后,预览控制器会预览4个不同'尺寸'的块,它可以被渲染,我有想法创建一个特定于特定块'尺寸'的属性,以便标题文本例如,可以根据块呈现的“大小”显示不同的内容。 从本质上讲,这将是一个字典,其中键是'大小',值将包含字符串内容。
有没有人做过这样的Dictionary属性?
我已经尝试了几种方法,并且都陷入了困境:
自定义属性类型/自定义值类型。 以下关于创建自定义属性类型的示例(http://joelabrahamsson.com/creating-a-custom-episerver-property-with-a-custom-class-as-value/)我创建了一个自定义属性类型(PropertyDicitionaryString )和自定义值类型(DictionaryString)。 我可以通过实现一个显示模板来显示数值,该模板接收具有大小的标记,然后将Model.MyDictionaryString [ViewData [“Tag”]作为字符串]渲染。 但是,我还没有想出如何让内联编辑工作,因为不支持对@ Html.EditAttributes(x => x.MyDictionaryString [ViewData [“Tag”] as string])的调用; 该方法不支持lambda表达式中的索引或方法调用)。 任何人都知道如何创建这样的内联编辑器?
自定义属性类型/原始类型。 我重写了上面的自定义属性类型,让我们调用它(PropertyDictionaryStringAsPrimitive),以便Value属性返回一个字符串。 这使我可以将我的模型定义为:
[BackingType(typeof(PropertyDictionaryStringAsPrimitive)] public virtual string SizeSpecificString{get;set;}
我必须以一种方式破解PropertyDictionaryStringAsPrimitive,以便在当前渲染上下文中调用Value方法以确保其返回正确的值时接收“尺寸”。 我可以通过实现一个自定义的ContentDataInterceptor来实现这一点,该ContentDataInterceptor查找对PropertyDictionaryStringAsPrimitive.Value的调用并适当地设置Key。 所以现在显示的值可以正常工作,但内联编辑也不起作用。 当进行ajax保存调用时,我需要添加一些状态信息,以便告诉PropertyDictionaryStringAsPrimitive哪个键用于保存更改。 任何人都知道如何在内联编辑ajax保存请求期间传递额外的状态信息?
我看了一下[CultureSpecific]
属性。 如果我可以使用与CultureSpecific类似的机制来保持值的“大小”特定实例,那将会很有趣。 在花费了一些时间在反编译器中试图找出hwo CultureSpecific的作用之后,我将属性跟踪到CotnentDataAttributeScanningAssigner.AssignValuesToPropertyDefinition,将PropertyDefinitionModel.CultureSpecific标志设置为true,PropertyDefinitionSynchronizer.CreatePropertyDefintion使用PropertyDefinitionModel.CultureSpecificValue来设置Enum。 但我无法找到这个设置如何影响哪个值被加载。 任何人都知道如何使用Property level属性动态地改变Value的值?
我通常会避免自定义属性类型,我更喜欢坚持自定义编辑器(如果需要)和属性值的块属性(或块内容区域)。
也许一个可行的方法是:
1)创建一个类似SizeSpecificHeadingBlock的块类型:
接下来,您可以添加一个ContentArea , 并将AllowedTypes设置为SizeSpecificHeadingBlock 。
渲染ContentArea时,只需为当前大小渲染标题即可。
但是,这需要编辑人员为每个标题变化创建一个块,这有点麻烦 - 但您可以使用自定义编辑器来补充此方法以简化过程。
使用本地方式来存储属性值(而不是自定义属性类型)使您的实现更具前瞻性。 另外,如果您的自定义编辑器应该失败,您可以随时禁用它,只需使用“vanilla”EPiServer UI编辑您的属性值即可。
编辑:尽管目前处于测试阶段,但为了避免必须创建嵌套块,可能需要使用PropertyList <YourCustomType>来实现这种场景:http: //world.episerver.com/blogs/Per-Magne-Skuseth /日期/ 2015/11 /试图-OUT-propertylistt /
链接地址: http://www.djcxy.com/p/68869.html