#c# #asp.net-mvc
#c# #asp.net-mvc
Вопрос:
Как реализация MapRoute связывает {id}
второй параметр id =
с третьим?
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Это так же просто, как размышлять о переданном объекте?
Ответ №1:
ДА.
Он создает RouteValueDictionary
экземпляр из defaults
параметра, который заполняется из объектов PropertyDescriptor
.
Вы можете увидеть это в исходном коде:
if (values != null) {
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(values);
foreach (PropertyDescriptor prop in props) {
object val = prop.GetValue(values);
Add(prop.Name, val);
}
}
Комментарии:
1. где вы взяли источник, отражатель? Мне было интересно посмотреть код, который выполнял фактическое отражение — это TypeDescripter?
2. Я получил это из справочного источника для .Net 4. referencesource.microsoft.com
3.
TypeDescriptor
является стандартной библиотекой вSystem.dll
. По умолчанию он использует отражение, но может выполнять другие действия черезITypedList
иICustomTypeDescriptor
. (Вот как работает привязка к таблицам данных)