【问题标题】:Instantiating class into razor macro (not working)将类实例化为剃刀宏(不起作用)
【发布时间】:2014-05-24 20:46:19
【问题描述】:

我在我网站的 app_code 部分创建了一个类,并将这个类实例化到我的宏中,但它似乎不起作用。我在一个 winform 应用程序中测试了 linq 和功能,并且似乎以我想要的方式工作......只是似乎没有使用宏进行渲染,这就是我所拥有的:

宏:

@using umbraco.MacroEngines 
@using umbraco.MacroEngines.Library;
@inherits umbraco.MacroEngines.DynamicNodeContext 

@{
    DynamicNodeList pages = @Model.Children.Where("Visible").OrderBy("CreateDate desc");  
}

@{
    Common com = new Common();

    List<string> tags = new List<string>();

    string[] top10 = @com.GetTop10Tags(@pages);

    foreach(string tag in @top10)
    {
         <ul>@tag</ul>
    } 
}

App_Code - 通用类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using umbraco.MacroEngines;
using umbraco.MacroEngines.Library;

public class Common 
{
    public string[] GetTop10Tags(DynamicNodeList pages)
    {
        List<string> tags = new List<string>();

        foreach (var node in pages)
        {
            string[] aTags = node.GetPropertyValue("postTags").Split(',');

            foreach (string tag in aTags)
            {
                tags.Add(tag);
            }
        }

        string[] orderedList = tags
            .GroupBy(i => i)
            .OrderByDescending(g => g.Count())
            .Select(g => g.Key).Take(10).ToArray();

        return orderedList;
    } 
}

有人知道这里的问题是什么吗? 错误:加载 MacroEngine 脚本时出错(文件:TagCloud.cshtml)

【问题讨论】:

    标签: c# linq razor macros umbraco


    【解决方案1】:
     public string[] GetTop10Tags(DynamicNodeList pages)
        {
            List<string> tags = new List<string>();
    
            foreach (DynamicNode node in pages)
            {
                if (node.GetPropertyValue("postTags") != null)
                {
                    string[] aTags = node.GetPropertyValue("postTags").Split(',');
    
                    foreach (string tag in aTags)
                    {
                        tags.Add(tag);
                    }
                }
            }
    
            string[] orderedList = tags
                .GroupBy(i => i)
                .OrderByDescending(g => g.Count())
                .Select(g => g.Key).Take(10).ToArray();
    
            return orderedList;
        }
    

    我通过使用上面的代码得到了这个工作,不知道为什么会这样,但是通过将 var 切换到 DynamicNode 有帮助,以及在 foreach 之后添加验证以检查节点是否包含标签属性中的任何标签。 .. :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2014-02-09
      • 2015-08-14
      • 2014-06-13
      相关资源
      最近更新 更多