1

我的视图中有以下 C# Razor:

@{var activeFilters = 0;}
@foreach (string key in Request.QueryString)
{
    string value = Request.QueryString[key];

    if (!String.IsNullOrEmpty(value))
    {
        if (key.ToLower() != "filter" || key.ToLower() != "page" || key.ToLower() != "gridtype")
        {
            activeFilters++;
        }
    }
}

这将遍历查询字符串,并且计数有许多具有有效值来填充 activeFilters var。它还忽略过滤器、页面和网格类型。

这里有些例子:

?page=1 (0)

?filter=&other=test (1)

?filter&other=test (1)

我遇到的问题:

  • 它不会忽略键过滤器、页面和网格类型
  • 如果查询键不等于例如?page错误,它会中断Object reference not set to an instance of an object.
4

2 回答 2

4

如果您想忽略键过滤器、页面和网格类型,您必须更改

if (key.ToLower() != "filter" || key.ToLower() != "page" || key.ToLower() != "gridtype")

if (key.ToLower() != "filter" && key.ToLower() != "page" && key.ToLower() != "gridtype")

您不希望key成为“过滤器” 也不希望它成为“页面”“网格类型”。

至于缺少等号的问题,在循环的顶部放置一个条件

if (key == null) continue; 

它将跳过空键。另外,更换

@foreach (string key in Request.QueryString)

@foreach (string key in Request.QueryString.AllKeys)
于 2013-11-12T11:37:27.273 回答
2

你可以轻松,

@{ var activeFilters = Request.QueryString.AllKeys
       .ToList()
       .Where(key => key != "filter")
       .Where(key => key != "page")
       .Where(key => key != "gridtype")
       .Count(key => !string.IsNullOrEmpty(Request.QueryString[key]));}
于 2013-11-12T12:39:03.513 回答