ASP.net MVC v2 - Debugowanie problemów związanych z wiązaniem modeli - USTERKA?

Mam więcej niż małą trudność przy próbach debugowania, dlaczego MVC nie wiąże się poprawnie w danym przypadku, który mam ...

Zasadniczo mam moją akcję, która odbiera złożony obiekt, który z kolei ma złożony obiekt podrzędny - Activity.Location.State (gdzie Activity jest obiektem złożonym, którego oczekuje akcja, Location jest złożonym obiektem potomnym, a State jest tylko łańcuchem) .

Teraz utworzyłem projekt testowy, który, o ile mi wiadomo, dokładnie naśladuje scenariusz, który mam, w tym przypadku testowym powiązanie działa ... Ale w moim projekcie powiązanie z działaniem działa, ale nie z lokalizacją ... Umieszczając punkty przerwania w obrębie właściwości Locaiton, mogę stwierdzić, że MVC pobiera złożony obiekt Location z działania, ale nie ustawia żadnych właściwości ...

Próbuję debugować problem, ale potrzebuję dostępu do podglądu 2 symboli MVC v2, których nie mogę wyśledzić ... Chciałbym zobaczyć, co faktycznie robi, gdy wyciągnie obiekt lokalizacji (dla niektórych powód, dla którego myślę, że może zawodzić wewnętrznie, ale połykać wyjątek.

Jakieś pomysły na to, co mógłbym tutaj zrobić ...

Pozdrawiam Anthony

AKTUALIZACJA:

OK zrobiłem to, co J.W. zasugerował i bezpośrednio odniósł się do projektu MVC ...

Znalazłem problem i była jedna bardzo mała różnica, którą przeoczyłem ... W wyniku czego odkryłem, że MVC obecnie nie obsługuje wielu poziomów dziedziczenia INTERFACE, jeśli chodzi o wiązanie modelu ... Zobacz następujące ...

//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)
{
}

Stąd odkryłem, że MVC znajduje Lokalizację i odczytuje jej meta jako ILocation, ale gdy GetModelProperties jest uruchamiany w DefaultModelBinder, następuje:

    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
    }

Dlatego zakładam, że w tym momencie TypeDescriptionProvider nie obsługuje tego stylu dziedziczenia, co mnie bardzo dziwi. Patrząc na źródło v1 wygląda na to, że zostało wprowadzone w wersji v2 - ale v1 nie był w stanie obsłużyć tego, co próbuję zrobić.

Nie powiedziałbym, że to naprawdę błąd, ale próbowałem zastąpić moje interfejsy konkretnymi klasami i działało dobrze. Stąd zachowanie nie jest tak naprawdę, czego bym się spodziewał i jest trochę niespójne.

Jakieś pomysły??? Pomyślałbym, że to dziedziczenie nie jest dość standardowe, ale zdarza się wystarczająco często, aby je zaspokoić. Dziękuję za odpowiedź.

Twoje zdrowie

questionAnswers(2)

yourAnswerToTheQuestion