ASP.net MVC v2 - отладка проблем привязки модели - ошибка?
У меня больше, чем небольшая трудность, пытаясь отладить, почему MVC не связывается правильно в данном случае, который я имею
По сути, у меня есть действие, которое получает сложный объект, который, в свою очередь, имеет сложный дочерний объект - Activity.Location.State (где Activity - сложный объект, который ожидает действие, Location - сложный дочерний объект, а State - просто строка) ,
Теперь я настроил тестовый проект, который, насколько я могу точно сказать, имитирует реальный сценарий, который у меня есть, в этом тестовом случае привязка работает ... Но в моем собственном проекте привязка к Activity работает, но не к Location ... Помещая точки останова в свойстве Locaiton, я могу сказать, что MVC извлекает сложный объект Location из Activity, но не устанавливает никаких свойств ...
Я пытаюсь отладить проблему, но мне нужен доступ к символам MVC v2 preview 2, которые я не могу отследить ... Я хотел бы увидеть, что он на самом деле делает, когда вытаскивает объект местоположения (для некоторых причина, я думаю, что это может быть внутренняя ошибка, но проглатывание исключения).
Любые идеи о том, что я мог бы сделать здесь ...
Ура Энтони
ОБНОВИТЬ:
Хорошо, я сделал то, что J.W. предложил и прямо ссылаться на проект MVC ...
Я обнаружил проблему, и было одно очень маленькое различие, которое я упустил из виду ... В результате я обнаружил, что MVC в настоящее время не поддерживает множественные уровни наследования INTERFACE, когда речь идет о привязке модели ... См. Следующее ...
//MODEL
public class Location : ILocation
{
...
}
public interface ILocation : ILocationCore
{
...
}
public interface ILocationCore //In my sample I didn't have this second level interface
{
...
//MVC doesn't find any of these properties
...
}
public class Activity : IActivity
{
...
}
public interface IActivity : IActivityCore
{
ILocation Location { get; set; } //MVC finds this and reads its meta type as an ILocation
//Also the implementation of this Location within Activity will always return a instance - our IoC takes care of that, so MVC should never have to create the instance
}
public interface IActivityCore
{
...
}
//CONTROLLER
public ActionResult Create(Activity activity)
{
}
Следовательно, я обнаружил, что MVC находит Location и считывает его метатип как ILocation, но когда GetModelProperties запускается в DefaultModelBinder, происходит следующее:
protected virtual PropertyDescriptorCollection GetModelProperties(ControllerContext controllerContext, ModelBindingContext bindingContext) {
return GetTypeDescriptor(controllerContext, bindingContext).GetProperties();
//This return no properties
}
protected virtual ICustomTypeDescriptor GetTypeDescriptor(ControllerContext controllerContext, ModelBindingContext bindingContext) {
return new AssociatedMetadataTypeTypeDescriptionProvider(bindingContext.ModelType).GetTypeDescriptor(bindingContext.ModelType);
//bindingContext.ModelType - is ILocation
}
Следовательно, на данный момент я предполагаю, что TypeDescriptionProvider не поддерживает этот стиль наследования, что меня весьма удивляет. Также, глядя на исходный код v1, похоже, что он был представлен с v2 - но v1, возможно, не смог поддержать то, что я пытаюсь сделать в любом случае.
Я бы не сказал, что это действительно ошибка, но я попытался заменить свои интерфейсы конкретными классами, и это работало нормально. Следовательно, поведение не совсем то, что я ожидал, и немного противоречиво.
Есть идеи??? Я бы подумал, что это наследие не является достаточно стандартным, но будет происходить достаточно часто, чтобы обслужить. Спасибо за ответ.
ура