Si sta tentando di inviare più moduli con una chiamata Ajax (jQuery) a un'applicazione ASP.Registrazione/binding di più moduli sul back-end ASP.NET MVC (MEF)
Usiamo il seguente codice jQuery:
var formContainer = {
Form1 : form1.serialize(),
Form2 : form2.serialize()
}
$.ajax({
type: "POST",
url: '@Url.Action("CreateModel", "Controller")',
data: formContainer,
success: function (result) { }
});
Sul server che riceviamo il seguente nella proprietà Request.Form:
Key : Value
Form1 : All serialized form elements for Form1
Form2 : All serialized form elements for Form2
Normalmente si usa il seguente metodo in modo ASP è automaticly creando l'oggetto con il giusto valore di proprietà:
public ActionResult CreateModel(ClassForForm1 obj)
Ma perché i due f gli orms vengono inviati insieme al modelbinder non è possibile associare e creare la classe. Quindi per questa azione vogliamo che il modelbuilder usi i valori in Request.Form ["Form1"].
Non possiamo usare un modelbinder personalizzato, perché usiamo una libreria esterna (DevExpress, hanno scritto una propria implementazione sopra questo).
Stiamo utilizzando il framework MEF per aggiungere funzionalità (queste funzionalità sono aggiunte come moduli nella vista). Per questo motivo non sappiamo cosa aspettarsi dal back-end. Quindi scrivere un wrapper ViewModel non è accettabile.
La funzionalità per l'elaborazione degli altri dati dei moduli verrà gestita all'interno di altri moduli.
Tutte le soluzioni sono benvenute!
Grazie in anticipo.
Quando si dice "Quindi per questa azione si desidera che il modelbuilder utilizzi i valori in Request.Form [" Form1 "]." essenzialmente vuoi che i valori di Form2 vengano ignorati per quella richiesta? Oppure è necessario chiamare CreateModel per ** ogni modulo ** nella richiesta, in modo tale che se vengono inviati 3 moduli, CreateModel viene eseguito tre volte, una volta per ogni modulo? – AaronLS
Sì, vogliamo "ignorare" i valori in Request.Form ["Form2"] come hai detto tu. –
Ho provato a modificare i valori Request.Form in un modelbinder personalizzato, ma sta leggendo i valori da un IUnvalidatedprovider. Sebbene fosse l'ultimo codice (nella funzione statica) in questa pagina: http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/. Ma non sono riuscito a trovare come modificare i valori in quello. Questo è quello che mi sono trovato, altre soluzioni sono benvenute naturalmente :) –