routevalueDictionaryは空の値を無視します
-
21-12-2019 - |
質問
クエリ文字列に必要な空ルート値がほとんどありません:
var routeValues = new RouteValueDictionary();
routeValues.Add("one", "");
routeValues.Add("two", null);
routeValues.Add("three", string.Empty);
.
それをUrlHelper.RouteUrl()
に渡すと、すべての値を無視し、生成されたクエリ文字列は空です。ただし、/?one=&two=&three=
のようなURLは完全に有効です。どうやってそうできますか?
解決
この現象はデフォルトのルートクラスに組み込まれています。これはこのチェックを行う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つのオプションしかありません。
- サブクラスルートとgetVirtualPath()をオーバーライドし、parsedroute.bind()をカスタム実装に置き換えます。
- サブクラスルートベースとカスタムルート実装を作成します。
3番目のオプションは、照会文字列に空のパラメーターを持つことがほとんどまたは全くないので、これは本当に問題ではないので、これは本当に問題ではありません。
所属していません StackOverflow