c# - 在 Umbraco 4.1 中创建 UserControl 以显示 DocumentType 列表

标签 c# user-controls umbraco

我是 Umbraco 的新手,到目前为止我很喜欢它,我了解它的工作原理,但我想知道如何以及最好的方法是什么来创建显示来自 umbraco 数据库的一些信息的用户控件?当它很简单时,我使用 XSL 模板来完成,但现在我需要更多的可能性。

我尝试做的是有一个 UC 连接到 Umbraco 的数据库,获取文档类型“NewsItem”的所有文档并将它们列在我的 UC 中。

我找到了这篇文章:Umbraco: List Child Nodes in User Control但事实并非如此,因为我不想硬编码 nodeId,我想根据 DocumentType 查找我的新闻。

我现在有一个 API 可以访问 umbraco 的数据,但没有找到任何示例。我还在 umbraco.tv 上观看了很多视频,但仍然不知道最好的方法是什么。还有 LINQ to Umbraco ( http://our.umbraco.org/wiki/reference/api-cheatsheet/linq-to-umbraco ),但不确定这是否是执行此操作的好方法。

此外,有没有办法在其他 WebProject 中测试用户控件?我的意思是在其他项目中连接到Umbraco的db,这样就不用去umbraco的网站去测试了?

非常感谢!

最佳答案

您的问题有几个方面,我会尝试逐一解决。

  1. 使用 umbraco.presentation.nodefactory 获取特定类型的节点。对于此示例,我将假设您的所有 NewsItems 都是特定节点的子节点,在本例中节点 ID 为 1024。

    using umbraco.presentation.nodeFactory;
    
    namespace cogworks.usercontrols
    {
        public partial class ExampleUserControl : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                var specificNode = new Node(1024);
                var childNodes = specificNode.Children;
    
                foreach(var node in childNodes)
                {
                    if(node.NodeTypeAlias == "NewsItem")
                    {
                        //Do something with your NewsItem node!
                    }
                }
            }
        }
    }
    

这可能不是最有效的方法,但作为示例是可以的。

  • 递归遍历节点树并将找到的节点添加到列表的示例:

    public static List<Node> SelectChildrenByNameRecursive(Node node, string docType)
    {
        var nodes = new List<Node>();
    
        foreach (Node child in node.Children)
        {
            FindChildrenByDocType(child, docType, ref nodes);
        }
    
        return nodes;
    }
    
    private static void FindChildrenByDocType(Node node, string docType, ref List<Node> nodes)
    {
        if (node.NodeTypeAlias == docType)
        {
            nodes.Add(node);
        }
    
        foreach (Node childNode in node.Children)
        {
            FindChildrenByDocType(childNode, docType, ref nodes);
        }
    }
    
  • 再次只是示例代码...

  • 测试 Umbraco,您始终需要在 Umbraco 实例中运行,因为 NodeFactory 是内存内容缓存之上的 API。

  • 进一步阅读

  • http://blog.hendyracher.co.uk/umbraco-helper-class/

    http://our.umbraco.org/wiki/how-tos/useful-helper-extension-methods-(linq-null-safe-access)

    关于c# - 在 Umbraco 4.1 中创建 UserControl 以显示 DocumentType 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3248152/

    相关文章:

    c# - 非托管内存泄漏

    c# - 如何获取字符串中的向量位置并将其存储为整数?

    asp.net - 如何捕获在我的 ASCX 控件(而不是代码隐藏)上引发的异常?

    c# - 从外部javascript文件获取用户控件中的clientid

    umbraco - 如何按文档类型获取所有节点

    c# - 如何使用 StringBuilder AppendFormat 行

    c# - 边际时间的夏令时更改时间表触发器

    c# - WPF 从用户控件调用父方法

    asp.net - 如何使用 .net 用户控件创建 Umbraco 内容节点?

    web-services - 如何在umbraco中调用网络服务