Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 限制块仅用于从上位机中某个接口继承的ContentArea中_C#_.net_Interface_Block_Episerver - Fatal编程技术网

C# 限制块仅用于从上位机中某个接口继承的ContentArea中

C# 限制块仅用于从上位机中某个接口继承的ContentArea中,c#,.net,interface,block,episerver,C#,.net,Interface,Block,Episerver,我已经考虑了一段时间了。假设我有一个块,该块应该从内容区域中删除的页面访问属性。我有多个页面,其中每个页面都应该与此块兼容,必须从接口继承(我们称之为IHaveProperties)并实现这些属性,以便我可以将“currentPage”强制转换到此接口中,从而访问其中的属性 我唯一的问题是,用户在编辑模式下倾向于将该块放到该块不属于的contentarea。这是我主要关心的问题。如果页面上的ContentArea是IHaveProperties接口的一个实现,那么我是否可以限制该块,使其只能放置

我已经考虑了一段时间了。假设我有一个块,该块应该从内容区域中删除的页面访问属性。我有多个页面,其中每个页面都应该与此块兼容,必须从接口继承(我们称之为IHaveProperties)并实现这些属性,以便我可以将“currentPage”强制转换到此接口中,从而访问其中的属性

我唯一的问题是,用户在编辑模式下倾向于将该块放到该块不属于的contentarea。这是我主要关心的问题。如果页面上的ContentArea是IHaveProperties接口的一个实现,那么我是否可以限制该块,使其只能放置到作为接口实现的ContentArea上

或者另一种方法是在这个块类型的接口中有一个contentreference,并在没有contentarea的情况下呈现它


我希望得到ContentArea解决方案…

是的,您可以通过向ContentArea属性添加如下属性来实现:

[AllowedTypes(typeof(IHaveProperties))]
public virtual ContentArea SomeContentArea { get; set; }
关于这一点,EPiServer在这里发布了一篇很棒的帖子:


您可以在content area属性上使用属性
AllowedTypes
,如果这还不够,您可以通过实现
IValidate
来创建自己的验证,请参见我知道这一点。当用户试图将块拖动到不应容纳此块的ContentArea时,问题仍然存在。在将currentPage强制转换到接口时,该块有一个条件,在该接口中我执行空检查,并捕获由于无效强制转换(未实现该接口的页面)而导致的任何异常。我不确定这是什么意思。想展示一个代码示例吗?