Tengo esta función JQuery:
function EditContactPost() { var urlEditPost = $("#hdnInfo").data("url_add_contact"); var test = $("#formEditContact").serialize(); alert(test); $.ajax({ type: 'post', url: urlEditPost, data:{ marketingContactVM: test }, }) } Estoy haciendo una alerta como ven y estoy viendo que la variable test tiene la forma serializada correctamente con todos los valores. Pero cuando la acción del controlador recibe esta solicitud en el lado del servidor, marketingContactVM siempre es nulo. ¿Por qué está pasando esto? La acción de mi controlador se ve así:
[HttpPost] public ActionResult AddContact(MarketingVM marketingContactVM) //always null { some code... }En caso de que esta sea mi clase modelo, contiene otra lista dentro:
public class MarketingVM { public IEnumerable<string> States { get; set; } public List<MarketingVM> MarketingList { get; set; } public string Firstname { get; set; } public string Lastname { get; set; } public string Company { get; set; } public string Address { get; set; } public string City { get; set; } public string State { get; set; } public string Zip { get; set; } public string Country { get; set; } public string Phone { get; set; } public string Fax { get; set; } public string Mail{ get; set; } public string URL { get; set; } public bool IsTrue{ get; set; } public int OtherId{ get; set; } } Revisé la pestaña Red en DevTools y esta es la Request URL:http://localhost:56602/ControllerName/AddContact , eso debería estar bien. Pero los datos se envían como FormData , así:
marketingContactVM:Company=Microsoft+Company&Email=user10%40email.co&First= Auto&Last=Mapper&Phone=98797988997&Fax=&URL=ww.auto.org&Adress=automapper+ street&City=auto+city&State=FL&Zip=33654&Country=USA&MarketingContacts%5B0%5D .Name=1%2F03%2F2012+1%3A15+PM&MarketingContacts%5B0%5D.IsSelected=false.. y así. Tal vez la forma en que se envían los datos... Creo que el formato correcto debería ser:
marketingContactVM: Company=Microsoft Company Email=user10@email.co First=Charles Last=Johnston Phone=98797988997 Fax=989898 URL=ww.auto.org Adress=North streetCity=Sacramento State=FL Zip=33654 Country=USA MarketingContacts.Name=Piotr MarketingContacts.IsSelected=false
ya que está serializing el formulario, no necesita agregarlo en el objeto json
data:{ marketingContactVM: test },en su lugar, simplemente pase el objeto serializado como este
$.ajax({ type: 'post', url: urlEditPost, data:test, })Prueba esto:
$.ajax({ url: urlEditPost, method: "POST", data: { marketingContactVM: test }, dataType: "json" });Agregue la propiedad contentType . De esta forma, AP.NET MVC sabrá deserializar el cuerpo de la solicitud como JSON.
function EditContactPost() { var urlEditPost = $("#hdnInfo").data("url_add_contact"); var test = $("#formEditContact").serialize(); alert(test); $.ajax({ type: 'post', url: urlEditPost, data:{ marketingContactVM: test }, contentType: 'application/json' }) } PD: También deberías usar data: JSON.stringify(test) .