使用Razor循环查询字符串

时间:2013-11-12 11:28:41

标签: c# asp.net-mvc razor

我的视图中有以下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.

2 个答案:

答案 0 :(得分:3)

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

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

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

您不希望key为“过滤器” 您不希望它是“页面”“gridtype”

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

if (key == null) continue; 

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

@foreach (string key in Request.QueryString)

@foreach (string key in Request.QueryString.AllKeys)

答案 1 :(得分: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]));}