在数组中计算Razor,Umbraco

时间:2018-06-07 05:20:48

标签: javascript jquery razor umbraco

我有一系列记录

Model.Categories = ["apple", "banana", "apple", "orange"]

从这个数组我逐个显示记录

 @foreach (var category in Model.Categories)
            {
                <a href="@Url.ArticulateCategoryUrl(Model, category)">@category</a>                   
            }

所以这个目前显示两次苹果记录,但我想显示单个时间与此处的计数

apple -(2)
banana
orange
像这样可以帮我解决Razor如何实现这个问题?

3 个答案:

答案 0 :(得分:1)

为此,我们需要在Model中创建Method,它将返回类别及其出现的Dictionary。请找到以下方法,可用于返回字典。

public Dictionary<string,int> CountArray()
    {
        Dictionary<string, int> countArr = new Dictionary<string, int>();

        foreach (var category in Categories)
        {
            if(countArr.ContainsKey(category))
            {
                countArr[category] = countArr[category] + 1;
            }
            else
            {
                countArr[category] = 1;
            }
        }
        return countArr;
    }

现在在cshtml文件中创建一个变量,并从模型中返回此值。 在foreach循环中使用此变量。 我想这可以帮助你解决问题。

我真的不建议采用这种方法。但是,如果您需要帮助,请找到Razor Code。

@{ Dictionary<string, int> countarry = new Dictionary<string, int>();}
@foreach (var category in Model.Categories)
{
    if (countarry.ContainsKey(category))
    {
        countarry[category] = countarry[category] + 1;
    }
    else
    {
        countarry[category] = 1;
    }
}
@foreach (var categoryName in countarry.Keys)
            {
if(countarry[categoryName] > 1)
        <a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName - (@countarry[categoryName])</a>
else
<a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName</a>
    }

我希望这是你所期待的。

答案 1 :(得分:0)

我有简单的解决方案

if(sortFruits.includes(fruit)==false){
    sortFruits.push(fruit);
}

var sortFruits = []; (水果的果实){

{{1}}

} 的console.log(sortFruits);

答案 2 :(得分:0)

不确定是否可以使用“Razor代码”,但为什么不使用Linq GroupBy?

以下代码在浏览器上生成您的预期输出。

@foreach (var category in categories.GroupBy(k => k))
{
    <a>@category.Key@(category.Count() > 1 ? $" - ({category.Count()})" : "")</a><br/>
}

以上示例适用于Razor 3.0.0.0和.Net franework 4.6.1(C#6.0)

上面的代码是在尝试按问题中的预期输出后的结果。如果使它更简单,可能它可以在早期版本中工作。

@foreach (var category in categories.GroupBy(k => k))
{
    <a>@category.Key - @category.Count()</a><br/>
}