我的视图中有以下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.
答案 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]));}