我在查询字符串中有几个空路由值:
var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);
如果我然后将其传递给UrlHelper.RouteUrl()
,它将忽略所有值,并且生成的查询字符串为空。但是,像/?one=&two=&three=
这样的网址完全有效。我怎么能这样做?
答案 0 :(得分:2)
此行为内置于默认的Route类中。它调用ParsedRoute.Bind()方法进行检查:
if (IsRoutePartNonEmpty(obj2))
{
acceptedValues.Add(key, obj2);
}
这是做什么的:
private static bool IsRoutePartNonEmpty(object routePart)
{
string str = routePart as string;
if (str != null)
{
return (str.Length > 0);
}
return (routePart != null);
}
这有效地防止了任何查询字符串值为空时输出。它所做的一切都是私有的,静态的,内部的,否则无法覆盖。因此,实际上只有两个选项可以覆盖此行为。
我猜第三个选项是不管它,因为其他人已经指出这不是一个问题,因为查询字符串中的空参数很少或没有值。