我一直在加速EPiServer 7 MVC,并经历了Joel Abrahamsson的Alloy MVC Template。在看了自定义预览控制器之后,它预览了4种不同“尺寸”的块,它可以被渲染,我有想法创建一个特定于某个块“大小”的属性,以便标题文本,例如,可以根据块渲染的“大小”显示不同的内容。从本质上讲,这将是一个字典,其中Key是'size',Value将包含字符串内容。
有没有人制作过这样的词典属性?
我尝试了一些方法并且每个方法都遇到了问题:
自定义属性类型/自定义值类型。按照创建自定义属性类型(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”]作为字符串]);该方法不支持lambda表达式中的索引或方法调用)。 有谁知道如何创建这样的内联编辑器?
自定义属性类型/基元类型。我重写了上面的自定义属性类型,让我们调用它(PropertyDictionaryStringAsPrimitive),以便Value属性返回一个字符串。这允许我将我的模型定义为:
[BackingType(typeof(PropertyDictionaryStringAsPrimitive)]
public virtual string SizeSpecificString{get;set;}
当我调用Value方法以确保它返回正确的值时,我必须以一种方式让PropertyDictionaryStringAsPrimitive在当前渲染上下文中接收'size'。我能够通过实现自定义ContentDataInterceptor来实现这一点,该ContentDataInterceptor查找对PropertyDictionaryStringAsPrimitive.Value的调用并适当地设置Key。所以现在显示的值工作正常,但内联编辑也不太有效。当进行ajax save调用时,我需要添加一些状态信息,以便告诉PropertyDictionaryStringAsPrimitive使用哪个Key来保存更改。 任何人都知道在内联编辑ajax保存请求期间如何传回其他状态信息?
我看了[CultureSpecific]
属性。如果我可以使用与CultureSpecific类似的机制来保持值的“大小”特定实例,那将会很有趣。在反编译器中花费一些时间试图解决hwo CultureSpecific的神奇之处,我将属性跟踪到CotnentDataAttributeScanningAssigner.AssignValuesToPropertyDefinition,将PropertyDefinitionModel.CultureSpecific标志设置为true,PropertyDefinitionSynchronizer.CreatePropertyDefintion用于将PropertyDefintiionModel.CultureSpecificValue设置为Enum。但是我找不到这个设置如何影响加载哪个值。 任何人都知道如何使用属性级别属性动态更改值?
答案 0 :(得分:3)
我通常会避免自定义属性类型,我更喜欢坚持自定义编辑器(如果需要)和属性值的块属性(或内容区域中的块)。
也许一种可行的方法是:
1)创建一个像 SizeSpecificHeadingBlock 这样的块类型:
接下来,您可以添加 ContentArea ,并将允许的类型设置为 SizeSpecificHeadingBlock 。
渲染ContentArea时,您只需渲染当前大小的标题。
但是,这需要编辑者为每个标题变体创建一个块,这有点麻烦 - 但您可以使用自定义编辑器来补充此方法以简化过程。
使用本机方式存储属性值(而不是自定义属性类型)使您的实现更具面向未来。此外,如果您的自定义编辑器失败,您可以随时禁用它,只需使用“vanilla”EPiServer UI来编辑您的属性值。
修改:虽然目前处于测试阶段,但对于此类情况,可能需要使用 PropertyList< YourCustomType> ,以避免必须创建嵌套块: http://world.episerver.com/blogs/Per-Magne-Skuseth/Dates/2015/11/trying-out-propertylistt/