ASP MVC 3 ajax с привязкой модели json к сложному классу

У меня есть следующая иерархия классов в моем проекте ASP MVC 3. Некоторые записи могут иметь контейнеры, а внутри этих контейнеров может быть некоторый контент. Классы контейнера и содержимого являются абстрактными классами.

Иерархия

Мне нужно получить json-запрос от браузера и привязать его к модели, которая является типом класса Entry. Проблема в том, что класс DefaultModelBinder неправильно создал класс модели Entry, потому что он не знал, каким должен быть конкретный контейнер. Например:

var dataaa = { Name: 'Some Name', Containers: [{ ContainerId: 0}] };
    $.ajax({
        url: 'Add',
        type: "POST",
        data: JSON.stringify(dataaa),
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            alert('hello');
        });

+

[HttpPost]
public string Add(Entry entry)
{
    return "foo";
}

Следующий запрос приводит к исключению сервера: Невозможно создать абстрактный класс. Я могу добавить поле Type в запрос json, например:

{ Name: 'Some Name', Containers: [{ Type: 'FullContainer', ContainerId: 0}] }; 

Как проинструктировать механизм привязки модели для сопоставления объекта, для которого в поле «Тип» установлено значение «FullContainer», в класс FullContainer?


person MaciejLisCK    schedule 07.05.2012    source источник


Ответы (2)


Является ли Entry моделью представления? Достаточно ли свойств, содержащихся в базовой записи, для вашего сообщения, даже если оно относится к типу «Полный контейнер»? Если это не модель представления, но это все, что вам действительно нужно, я бы посоветовал создать неабстрактный класс EntryViewModel.

В противном случае ознакомьтесь с ответом Дарина здесь привязка полиморфной модели.

person DMulligan    schedule 07.05.2012

Я разместил ответ на своей домашней странице .

person MaciejLisCK    schedule 11.10.2012