Ho un metodo di azione come questo di seguito.DefaultModelBinder e raccolta di oggetti ereditati
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Form newForm)
{
...
}
Ho un modello con le seguenti classi, che mi piacerebbe caricare i dati dai dati JSON Ajax.
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; }
}
Ecco i dati 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 gestisce la struttura dell'oggetto nidificata ma non può risolvere i differenti sottoclassi.
Quale sarebbe il modo migliore per caricare Elenco con le rispettive sottoclassi?
Puoi spiegare in dettaglio cosa stai cercando di realizzare qui? Sembra che tu stia cercando di associare l'intero modulo al viewmodel invece dei soli valori che contiene. Riesco a vedere il punto nel generare dinamicamente le forme basandosi su alcuni dati JSON forniti dal backend, ma faccio fatica a capire perché vorresti fornire di nuovo il backend alla struttura stessa invece dei valori solo quando un utente compila il modulo. –
Non sto generando il modulo in modo dinamico. Sto accettando il json che rappresenta la struttura del modulo che verrà salvato successivamente nel sistema. – Thurein