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";
}
Следующий запрос приводит к исключению сервера:Невозможно создать абстрактный класс. Я могу добавить поле типа в запрос JSON, например:
{ Name: 'Some Name', Containers: [{ Type: 'FullContainer', ContainerId: 0}] };
Как указать механизму привязки модели для сопоставления объекта, для которого в поле Тип установлено значение 'FullContainer', с классом FullContainer?
2 ответа
Является ли Entry моделью представления? Достаточно ли свойств, содержащихся в базовой записи, для вашего сообщения, даже если оно имеет тип Full Container? Если это не модель представления, но это все, что вам действительно нужно, я бы посоветовал сделать EntryViewModel
класс, который не является абстрактным.
В противном случае, проверьте ответ Дарина здесь Полиморфная модель привязки.