jQuery código:pasar múltiples JSON objetos a método de acción 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); } }); });
Código 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; }
}
Ahora el problema está, no podía hacerlo funcionar pasando "CategoryMode "," ProductModel "en el método de acción" ModelTwo ". La publicación JQuery identifica correctamente el método de acción "ModelTwo", pero los valores de las propiedades "cat", "prd" son nulos. "CategoryID", "CategoryName", "ProductID", "ProductName" todos son nulos a pesar de presionar ese método.
//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); } }); });
¿Qué pasa con mi primera llamada de JQuery al método de acción "ModelTwo"?
Pasé mucho tiempo averiguando esto, pero no estoy seguro de lo que está pasando. No hay problema con el enrutamiento aquí porque puedo aterrizar en el método de acción correcto ...
Cualquier ayuda será muy apreciada.
Gracias!
Esto es genial !!!!!! Funcionó. Funcionaba bien SIN la configuración de "ContentType" para la versión de parámetro único, pero doble. El único cambio que tuve que hacer fue convertir el stringify en datos que se transmiten como usted mencionó en lugar de todo el modelo en sí mismo "JSON.stringify ({cat: CategoryModel, prd: ProductModel})" ayudó mucho. ¡Hiciste mi día, Darin! Muchas gracias! –
Lo conseguí trabajando teniendo una clase contenedora que tiene "establecerse" de la categoría y clase de producto. Funcionaba bien para la versión de un solo parámetro, pero cuando paso dos parámetros. Pero de todos modos, su sugerencia ayudó, tuve que agregar contentType para ser json para el método de acción con dos parámetros. ¡Gracias! –
¿Funciona esto en Firefox? Funciona en IE bien, pero Firefox. No está aterrizando en el controlador de acción, cuando utilicé el violín para averiguar qué datos se pasan al controlador, simplemente en blanco. Por cierto, mi método de acción de controlador reside en un proyecto diferente, por lo que es la publicación de dominios cruzados. Funciona bien siempre que el método de acción tome un parámetro, pero dos. Algo no funciona al pasar los datos al dominio cruzado del controlador. –