【问题标题】:Populate custom tree with records from database使用数据库中的记录填充自定义树
【发布时间】:2013-02-16 00:55:24
【问题描述】:

我最近开始使用 Umbraco,并且正在研究如何将我自己的自定义部分添加到其中。

到目前为止,我已经设法添加了一个新部分,并且我还开始在各种博客文章的帮助下添加自定义树,例如:http://www.robertgray.net.au/2011/5/10/creating-a-custom-content-tree-in-umbracohttp://www.geckonewmedia.com/blog/2009/8/3/how-to-create-a-custom-section-in-umbraco-4

这个新部分的目的是显示我想存储在数据库中的查询。记录只需要查看但不可编辑。

到目前为止,我有一个名为“查询”的根节点和一个名为“一般查询”的节点。我想将所有查询列为“General Enquiries”的子节点,然后单击时,我希望能够在右侧的主区域中显示查询详细信息。

在上面链接的第一篇博文中,提供了以下代码来演示如何显示子节点:

using atomicf1.domain.Repositories;
using atomicf1.persistence;
using umbraco.cms.presentation.Trees;

namespace atomicf1.cms.presentation.Trees
{
    public class loadDrivers : BaseTree
    {
        private IDriverRepository _driverRepository;

        public loadDrivers(string application) : base(application)
        {
            _driverRepository = new DriverRepository();
        }

        protected override void CreateRootNode(ref XmlTreeNode rootNode)
        {
            rootNode.Icon = FolderIcon;
            rootNode.OpenIcon = FolderIconOpen;
            rootNode.NodeType = TreeAlias;
            rootNode.NodeID = "init";
        }

        public override void Render(ref XmlTree tree)
        {           
            var drivers = _driverRepository.GetAll();

            foreach(var driver in drivers) {
                var dNode = XmlTreeNode.Create(this);
                dNode.NodeID = driver.Id.ToString();
                dNode.Text = driver.Name;
                dNode.Icon = "user.png";
                dNode.Action = "javascript:openDrivers(" + driver.Id + ")";
                tree.Add(dNode);
            }            
        }

        public override void RenderJS(ref System.Text.StringBuilder Javascript)
        {
            Javascript.Append(
                @"
                    function openDrivers(id) 
                    {
                        parent.right.document.location.href = 'plugins/atomicf1/editDriver.aspx?id=' + id;
                    }
                ");
        }
    }
}

据我所知,此示例中的“驱动程序”似乎来自_driverRepository。但是,似乎没有任何代码示例解释它是什么以及它是如何从数据库中实际检索数据的。

对此的任何帮助将不胜感激。

【问题讨论】:

    标签: sql-server asp.net-mvc umbraco


    【解决方案1】:

    让我先说我对 Umbraco 知之甚少,所以这只是基于观察!

    如果您查看链接到 Robert Gray 博客文章的 github repository 中的源代码,您会发现 DriverRepository 的实现(它只是底层通用 AbstractRepository 抽象基类的 shell 子类,其中真正的工作发生了)。此代码与 Umbraco 无关,它只是与 NHibernate 结合的存储库模式的实现,用于在本例中位于 Umbraco 之上的示例 F1 应用程序中的数据访问。这段代码所做的是从应用程序中检索所有驱动程序,循环它们并在 Umbraco 中创建相应的 XmlTreeNodes。

    在您的情况下,您只需将 (I)DriverRepository 的引用替换为您在应用程序中使用的任何数据访问机制。

    例如,如果您要对 Robert 采取类似(尽管更简单)的方法,您的应用程序中可能会有如下内容:

    public class EnquiryRepository : IEnquiryRepository {
    
      // Methods for saving Enquiries, retrieving single Enquiries etc would go here...
    
      public IEnumerable<Enquiry> GetAll() {
        // Data access logic here - retrieve via NHibernate, Entity Framework,
        // ADO.net, in-memory objects (as below) etc.
        var enquiries = new List<Enquiry>
        {
          new Enquiry('Enquiry 1 title', 'Enquiry 1 content'),
          new Enquiry('Enquiry 2 title', 'Enquiry 2 content'),
          new Enquiry('Enquiry 3 title', 'Enquiry 3 content')
        }
        return enquiries;
      }
    
    }
    

    然后,您将在 Umbraco BaseTree 子类中以与 Robert 类似的方式使用它(循环并创建 XmlTreeNode 等)。

    【讨论】:

    • 非常感谢,这真的帮助我克服了我的困惑并理清了一些事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 2015-06-03
    • 2014-05-18
    • 2011-02-04
    • 1970-01-01
    相关资源
    最近更新 更多