JQuery codice:passare gli oggetti JSON multipla a metodo di azione MVC3
//This passes NULL for "CategoryID", "CategoryName", "ProductID", "ProductName" $("#btnPost").click(function() { var CategoryModel = { CategoryID: 1, CategoryName: "Beverage" }; var ProductModel = { ProductID: 1, ProductName: "Chai" }; var data1 = {}; data1["cat"] = CategoryModel; data1["prd"] = ProductModel; var jsonData = JSON.stringify(data1); $.ajax({ url: url + '/Complex/ModelTwo', //This works but property values are null type: 'post', dataType: 'json', data: { "cat": CategoryModel, "prd": ProductModel }, //jsonData, cache: false, success: function (result) { alert(result); }, error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); } }); });
codice MVC (C#):
public class ComplexController : Controller
{
public string ModelOne(Category cat)
{
return "this took single model...";
}
public string ModelTwo(Category cat, Product prd)
{
return "this took multiple model...";
}
}
public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
}
Ora il problema è, non ho potuto farlo funzionare passando "CategoryMode "," ProductModel "nel metodo di azione" ModelTwo ". Il post di JQuery identifica correttamente il metodo di azione "ModelTwo" ma "cat", i valori di proprietà "prd" sono nulli. "CategoryID", "CategoryName", "ProductID", "ProductName" sono tutti nulli nonostante si sia verificato tale metodo.
//THIS ONE WORKS FINE... $("#btnPost").click(function() { var CategoryModel = { CategoryID: 1, CategoryName: "Beverage" }; var ProductModel = { ProductID: 1, ProductName: "Chai" }; var data1 = {}; data1["cat"] = CategoryModel; data1["prd"] = ProductModel; var jsonData = JSON.stringify(data1); $.ajax({ url: url + '/Complex/ModelOne', //This works type: 'post', dataType: 'json', data: CategoryModel, cache: false, success: function (result) { alert(result); }, error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); } }); });
Allora, cosa c'è di sbagliato con il mio primo JQuery chiamata al metodo di azione "ModelTwo"?
Ho passato molto tempo a capirlo, ma non sono sicuro di cosa sta succedendo. Non vi è alcun problema con il routing qui perché posso atterrare sul giusto metodo di azione ...
Qualsiasi aiuto sarà molto apprezzato.
Grazie!
Questo è fantastico !!!!!! Ha funzionato. Stava funzionando bene SENZA impostazione "ContentType" per la versione a parametro singolo, ma raddoppiata. L'unico cambiamento che ho dovuto fare era fare in modo che la stringa sui dati passati fosse quella che hai menzionato invece dell'intero modello stesso "JSON.stringify ({cat: CategoryModel, prd: ProductModel})" ha aiutato molto. Hai reso la mia giornata Darin! Grazie mille! –
L'ho ottenuto lavorando con una classe wrapper con "get set" della categoria e della classe del prodotto. Stava funzionando bene per la versione a parametro singolo, ma quando passo due parametri. Ma comunque, il tuo suggerimento mi ha aiutato, ho dovuto aggiungere contentType come json per il metodo di azione parametrizzato. Grazie! –
Funziona in Firefox? Funziona in IE bene ma Firefox. Non è l'atterraggio nel controller azione, quando ho usato il violinista per scoprire che cosa i dati vengono passati al controller, solo vuoto. A proposito, il mio metodo di azione del controller risiede in un progetto diverso, quindi è la pubblicazione cross domain. Funziona bene fino a quando il metodo di azione prende un parametro ma due. Qualcosa non va nel passaggio dei dati al dominio trasversale del controller. –