【问题标题】:Handle content in usercontrols through CMS?通过 CMS 处理用户控件中的内容?
【发布时间】:2012-01-08 02:39:18
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net c1-cms


    【解决方案1】:

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

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

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

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

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

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

    从命名字段输出 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));            
            }
    
        }
    }
    

    【讨论】:

    • 只要 head 元素中没有任何内容,并且 FieldContent 本身不包含任何函数,它就可以工作。
    • 谢谢,这对我帮助很大。
    • 通过您的示例代码检索数据时,我遇到的问题是我只能添加位于子节点内的内容。如果正文中有明文怎么办?甚至更好:如何将正文的全部内容作为字符串(包括 HTML 标签)?我找不到那个方法。
    • 我已经更新了代码——它现在在正文中使用 Nodes() 而不仅仅是 Elements()——这应该包括 cmets 和字符串。未测试更改,请告诉我我遗漏了任何内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多