ASP.NET MVC: как объединить / добавить новый элемент в RouteValueDictionary - PullRequest
0 голосов
/ 27 декабря 2010

Я собираюсь упростить мою декларацию маршрута вокруг моего проекта asp.net mvc.Поэтому я создал несколько методов для этого.

context.MapExtendedRoute("Home".MergeWithAreaName(context),
                                 "www".MergeWithAppDomain(),
                                 "123".MergeWithDefaultRouteKeys(),
                                 new {Controller = "Home", Action = "Index"}.MergeWithDefaultRouteValues(),
                                 new {}.MergeWithDefaultRouteConstraints());

С первыми тремя методами проблем нет.Но метод 4 и 5 возвращает недопустимое значение.Начальная подпись (например, MergeWithDefaultRouteValues) выглядит примерно так:

public static object MergeWithDefaultRouteValues(this object defaultValues) {
        return new RouteValueDictionary(defaultValues) {{"Culture", "SomeValue"}};
    }

, который возвращает вывод, подобный этому (из RouteDebugger):

Count = 3, Keys = System.Collections.Generic.Dictionary`2+KeyCollection[System.String,System.Object], Values = System.Collections.Generic.Dictionary`2+ValueCollection[System.String,System.Object]

Вы не видите ни одного из ключей / значенийверно!Кто-нибудь может сказать мне, как я могу это выяснить?

Подпись MapExtendedRoute:

MapExtendedRoute(this AreaRegistrationContext context, string name, string domain, string url, object defaults, object constraints)

Заранее спасибо;)

1 Ответ

1 голос
/ 27 декабря 2010

Я решил эту проблему, добавив новую перегрузку в метод MapExtendedRoute и изменив подпись следующим образом:

MapExtendedRoute(this AreaRegistrationContext context, string name, string domain, string url, RouteValueDictionary defaults, RouteValueDictionary constraints)

Проблема заключается в приведении RouteValueDictionary к объекту, а затем возвращении объекта обратно в RouteValueDictionary!Итак, ключи / значения маршрутов берутся из первых свойств / значений RouteValueDictionary.

var defaultValues = new {};

//this works fine
var x = new RouteValueDictionary(defaultValues) {{"Culture", null}};

//But when x casted to object
var obj = (object)x;

//And obj casted back to RouteValueDictionary
var x2 = new RouteValueDictionary(obj);

//Everything goes to be fail!
...