代码循环内的 CMSEditableRegion

CMSEditableRegion inside a code loop

我正在尝试将 cmseditableregion 添加到存在于选项卡内容内部的 Kentico webpart,现在选项卡的数量是灵活的,所以我想动态生成它。我已经尝试了后面的方法 (stringbuilder) 但它只是将其呈现为 html 而不是在传递给文字时作为控件。

for (int i = 1; i <= TabCount; i++)
        {
            sb.AppendLine("<li class=\"htab-list__item--fininfo active\">");
            sb.AppendLine("<a href=\"#financial-result\" class=\"htab-list__link tab-link\">");
            sb.AppendLine("<cms:CMSEditableRegion runat=\"server\" id=\"ttl" + i.ToString() + "\" RegionType=\"Textbox\" RegionTitle=\"" + i.ToString() + " Title\" />");
            sb.AppendLine("</li>");

有没有办法让 CMSEditableRegion 能够在代码中动态设置,这样当循环构建页面代码时,它将作为控件位于正确的位置,而不仅仅是 html。

完整代码有更多 html 和每个循环 3 个可编辑区域,但它甚至不能只使用一个。

我建议您创建一个临时的 PageType(在 Kentico 7 中称为 DocumentType),您可以在其中放置所需的 HTML 文本。然后,您可以使用 Repeater Web 部件或 ASP.NET 转发器显示它,如果您像我一样喜欢使用代码。

动态添加控件如下:

// Let's assume that 'plc' is a placeholder. But it can be any control.
plc.Controls.Add(new LiteralControl("<li class=\"htab-list__item--fininfo active\">"));
plc.Controls.Add(new LiteralControl("<a href=\"#financial-result\" class=\"htab-list__link tab-link\">"));
plc.Controls.Add(new CMSEditableRegion { ID = "someid", RegionType = CMSEditableRegionTypeEnum.TextBox, RegionTitle = "sometitle" });
plc.Controls.Add(new LiteralControl("</li>"));

另请查看 MSDN