3

Composite C1 中是否有办法通过后端管理页面上使用的 ASP.NET 用户控件中的静态文本?

4

1 回答 1

3

在这个答案中,我假设您希望通过可视化编辑器(html 文档)维护“静态文本”,允许您的用户进行标题、样式、粗体等。如果您只是想要一个简单的大文本框,则可以简化。

首先在数据透视图中创建一个新的全局数据类型 - 将其命名(在下面的代码示例中,我将其命名为 Maw.Content)并为其提供以下两个字段:

  • FieldKey string(32) (Widget: 默认TextBox)
  • FieldContent字符串(无限制)(小部件:Composite.Widgets.String.VisualXhtmlEditor)

保存新数据类型后,您可以向其中添加“记录” - 并指定字段键和相关内容。

这应该负责管理内容 - 您获得的 UI 应该非常用户友好。您可以右键单击树中的数据类型并使用命令“在内容透视图中显示”,这将使您的数据类型显示在内容 | 网站项目。这样,您的用户根本不必使用数据透视图。

考虑将用户对数据文件夹的访问权限限制为“编辑”,以防您不需要用户添加/删除项目。右键单击包含数据项的文件夹并选择“编辑权限”。

从命名字段输出 XHTML 在您的用户控件中,您可以获取与特定 FieldKey 相关的 html,如下所示:

using System;
using System.Linq;
using System.Xml.Linq;
using System.Web.UI;
using Composite.Data;
using Composite.Core.Xml;

public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string fieldKey = "SomeKeyHere";
        string xhtmlString;

        using( var connection = new DataConnection())
        {
            xhtmlString = connection.Get<Maw.Content>().Where(f => f.FieldKey == fieldKey).Select(f => f.FieldContent).FirstOrDefault();
        }

        if (xhtmlString != null)
        {
            XhtmlDocument htmlDoc = XhtmlDocument.Parse(xhtmlString);
            foreach (XNode bodyNode in htmlDoc.Body.Nodes())
            {
                this.Controls.Add( new LiteralControl(bodyNode.ToString()));
            }
        }
        else
        {
            this.Controls.Add(new LiteralControl("Unknown FieldKey: " + fieldKey));            
        }

    }
}
于 2011-11-28T17:43:46.373 回答