У меня есть метод действий, подобный приведенному ниже.DefaultModelBinder и набор унаследованных объектов
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Form newForm)
{
...
}
У меня есть модель со следующими классами, которую я хотел бы загрузить данные из данных ajax JSON.
public class Form
{
public string title { get; set; }
public List<FormElement> Controls { get; set; }
}
public class FormElement
{
public string ControlType { get; set; }
public string FieldSize { get; set; }
}
public class TextBox : FormElement
{
public string DefaultValue { get; set; }
}
public class Combo : FormElement
{
public string SelectedValue { get; set; }
}
Это данные JSON.
{ "title": "FORM1",
"Controls":
[
{ "ControlType": "TextBox", "FieldSize": "Small" ,"DefaultValue":"test"},
{ "ControlType": "Combo", "FieldSize": "Large" , "SelectedValue":"Option1" }
]
}
$.ajax({
url: '@Url.Action("Create", "Form")',
type: 'POST',
dataType: 'json',
data: newForm,
contentType: 'application/json; charset=utf-8',
success: function (data) {
var msg = data.Message;
}
});
DefaultModelBinder обрабатывает структуру вложенных объектов, но не может разрешать различные подкласс.
Что было бы лучшим способом загрузить Список с соответствующими подклассами?
Можете подробнее рассказать о том, что вы пытаетесь сделать здесь? Похоже, вы пытаетесь связать всю форму в viewmodel, а не только с ее значениями. Я могу понять, как создавать динамические формы на основе некоторых данных JSON, которые предоставляет бэкэнд, но я стараюсь понять, почему вы хотели бы снова предоставить бэкэнд вместо самой структуры вместо значений только тогда, когда пользователь заполняет форму. –
Я не генерирую форму динамически. Я принимаю json, которые представляют структуру формы, которая будет сохранена позже в системе. – Thurein