ascx中有多个CMSEditableRegion?

时间:2017-02-20 17:07:50

标签: asp.net kentico ascx

我在ascx中有三个CMSEditableRegion控件,需要在aspx页面上进行3次或更多次。

问题是每个区域控件都将包含最后一组的内容。

经过一些研究后,我发现它在控件的ID下保存了数据库中控件的内容,这意味着第一个CMSEditableRegion的内容将被最后一个CMSEditableRegion覆盖。内容(因为至少有三个具有相同的服务器ID - 每个ascx一个)。嗯,相反,这是针对Kentico 5,但我看到的往往支持这一点。不幸的是,我为Kentico 5找到的解决方案在Kentico 10中不起作用。

如何在多次出现在aspx页面上的ascx中有多个CMSEditableRegion控件?

编辑:我们确实正在使用门户网站管理器(正确),我们的主人使用指定的Kentico文档进行设置。

4 个答案:

答案 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中,您可以看到门户管理器已放置在家中,您可以根据需要添加任意数量的可编辑区域。我试过这个。

希望这能解决你的问题。