我在ascx中有三个CMSEditableRegion控件,需要在aspx页面上进行3次或更多次。
问题是每个区域控件都将包含最后一组的内容。
经过一些研究后,我发现它在控件的ID下保存了数据库中控件的内容,这意味着第一个CMSEditableRegion的内容将被最后一个CMSEditableRegion覆盖。内容(因为至少有三个具有相同的服务器ID - 每个ascx一个)。嗯,相反,这是针对Kentico 5,但我看到的往往支持这一点。不幸的是,我为Kentico 5找到的解决方案在Kentico 10中不起作用。
如何在多次出现在aspx页面上的ascx中有多个CMSEditableRegion控件?
编辑:我们确实正在使用门户网站管理器(正确),我们的主人使用指定的Kentico文档进行设置。
答案 0 :(得分:2)
您需要确保每个CMSEditableRegion
的控件ID都是唯一的,以便每个实例的数据分别存储在数据库中。
您可以通过在Web部件ascx的代码隐藏文件中设置控件的ID来实现此目的。
将CMSEditableRegion放入ascx ...
<cms:CMSEditableRegion runat="server" ID="cerContent" RegionTitle="WYSIWYG" RegionType="HtmlEditor" />
...然后在后面的代码中设置控件的ID ...
cerContent.ID = this.ID + cerContent.ID;
此处通过将控件的ID与this.ID
结合来生成唯一ID,这是将Web部件放置在页面上时的唯一ID。
在Kentico 10中为我工作。
答案 1 :(得分:1)
将此代码添加到您的Web部件中。
public override void OnContentLoaded()
{
base.OnContentLoaded();
if (!this.StopProcessing)
{
theCMSEditableRegion.ID = theCMSEditableRegion.ID + base.ID;
}
}
答案 2 :(得分:0)
当您使用门户引擎时,您可以拥有任意多个,并且应该适用于aspx开发模型。你关注the example了吗? 我会查看数据库内部以确保正确保存XML:
select CONVERT(xml,DocumentContent), * from cms_document where documentid = 123
当您保存Web部件时(在门户引擎中,这相当于CMSEditableRegion),xml如下所示:
<content>
<webpart id="editabletext1;fe77e447-3af4-440f-a736-7c1e321cb3fc">456</webpart>
<webpart id="editabletext;3bb22493-8e7d-47c1-9dc0-dfc5aeff3157">123</webpart>
</content>
你的看起来应该相同或非常相似。它可能有一些东西要做ID或绑定。
答案 3 :(得分:0)
我认为你缺少Portal Manager:
<cms:CMSPortalManager ID="manPortal" runat="server" EnableViewState="false" />
但了解其工作原理的最简单方法是在CMSTemplates / CorporateSite中打开Kentico APX模板。在那里,您将找到带有主页模板(HomeASPX.aspx)的母版页(root.master)。在master中,您可以看到门户管理器已放置在家中,您可以根据需要添加任意数量的可编辑区域。我试过这个。
希望这能解决你的问题。