Umbraco 7通用节点类

时间:2016-05-05 12:37:46

标签: class umbraco umbraco7 app-code

在其他Stackoverflow用户的帮助下,我已经采取了一些方法来解决问题,但已经停止了。

我想在app_code .cshtml文件中构建一些泛型类,例如,一个是从函数中的文档返回属性值,例如

public static string docFieldValue(int docID,string strPropertyName){
    var umbracoHelper = new  Umbraco.Web.UmbracoHelper(Umbraco.Web.UmbracoContext.Current);
    var strValue = "";
    try{
        strValue = umbracoHelper.Content(docID).GetPropertyValue(strPropertyName).ToString();   
    }
    catch(Exception ex){
        strValue = "Error - invalid document field name (" + strPropertyName + ")";
    }


    var nContent = new HtmlString(strValue);

    return nContent;

}

这适用于从文档返回一个字段(即属性)。但是,如果我想返回2个或更多,理想情况下,我会将返回的节点存储在变量或类中,然后能够重复获取属性值,而无需在每次调用时查找文档 即没有打电话

umbracoHelper.Content(docID).GetPropertyValue(strPropertyName).ToString();

每次使用不同的strPropertyName参数,因为我认为这将意味着从数据库中进行多次读取。

我尝试构建一个类,其属性用于保存返回的节点

using Umbraco.Web;

using Umbraco.Core.Models;

...
public static Umbraco.Web.UmbracoHelper umbracoHelper = new Umbraco.Web.UmbracoHelper(Umbraco.Web.UmbracoContext.Current);
public static IPublishedContent docNode;

...
docNode = umbracoHelper.Content(docID);

但这破坏了代码。我可以将节点存储在类的属性中,如果存储,它是什么类型的?

1 个答案:

答案 0 :(得分:0)

首先,使用.cshtml文件是不必要的,而是使用.cs文件:-) CSHTML文件用于Razor代码和HTML和东西,CS文件用于“纯”C#。这也可以解释为什么你的最后一个想法崩溃了。

其次,UmbracoHelper使用Umbracos自己的缓存,这意味着每个请求都不会触及数据库。我至少会在方法之外定义umbracoHelper对象(因此每次调用方法时都会重用它而不是重新初始化)。

另外,请注意,属性值可以包含除字符串之外的所有其他对象类型。

修改

这是整个类文件的一个示例 - 我的示例命名空间是Umbraco7,我的示例类名是Helpers:

using Umbraco.Web;

namespace Umbraco7
{
    public class Helpers
    {
        private static UmbracoHelper umbracoHelper = new UmbracoHelper(UmbracoContext.Current);
        private static dynamic docNode;

        public static string docFieldValue(int docID, string strPropertyName)
        {
            docNode = umbracoHelper.Content(docID);
            return docNode.GetPropertyValue(strPropertyName).ToString();
        }
    }
}

这是一个如何在View中调用函数的示例(Views文件夹中的.cshtml文件):

@Helpers.docFieldValue(1076, "introduction")

助手再一次是我选择的班级名称。它可以是你想要的“任何东西”。我刚测试了这个并且它可以工作。

我建议您阅读一般的ASP.NET MVC和Razor开发,因为这不是特定于Umbraco的。