我在查询字符串中想要的空路由值很少:
var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);
如果我将其传递给
UrlHelper.RouteUrl()
,它会忽略所有值,并且生成的查询字符串为空。然而,像 /?one=&two=&three=
这样的网址是完全有效的。我怎样才能做到这一点?
此行为内置于默认 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);
}
这可以有效地防止输出任何查询字符串值(如果它们为空)。它所做的一切都是私有的、静态的、内部的,否则不可能被覆盖。因此,实际上只有 2 个选项可以覆盖此行为。
我想第三个选项是不管它,正如其他人指出的那样,这并不是真正的问题,因为查询字符串中的空参数几乎没有价值。
如果还需要给地址添加空值,可以这样操作:
(以JS为例...)
var rt = new RouteValueDictionary();
foreach (var it in rt)
{
if (urlto != "")
{
urlto += "&";
}
urlto += it.Key + "=" + it.Value;
}
//Response.Redirect("hello?" + urlto);
Response.Redirect("../hello?" + urlto);