在其他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);
但这破坏了代码。我可以将节点存储在类的属性中,如果存储,它是什么类型的?
答案 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的。