Ajax Post请求MVC

时间:2017-04-11 17:51:09

标签: javascript jquery ajax asp.net-mvc

我有这个JQuery函数:

function EditContactPost()
    {
        var urlEditPost = $("#hdnInfo").data("url_add_contact");
        var test = $("#formEditContact").serialize();        
        alert(test);
        $.ajax({
            type: 'post',
            url: urlEditPost,                    
            data:{ marketingContactVM: test },                           
        })
    }

我正在看警报,我正在观察测试变量的表格是否已正确序列化所有值。但是,当控制器操作在服务器端marketingContactVM收到此请求时,始终为空。为什么会这样? 我的控制器操作如下所示:

 [HttpPost]
        public ActionResult AddContact(MarketingVM marketingContactVM) //always null
        {
some code...
        }

以防这是我的模型类,它包含另一个列表:

     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; }
    }

我已经检查了DevTools中的网络选项卡,这是Request URL:http://localhost:56602/ControllerName/AddContact,应该没问题。 但数据是以FormData发送的,如下所示:

    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

..和那样。也许数据的发送方式..我认为正确的格式应该是:

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

3 个答案:

答案 0 :(得分:2)

因为你是json表单,你不需要在 data:{ marketingContactVM: test }, 对象中添加它

$.ajax({
          type: 'post',
          url: urlEditPost,                    
          data:test,                           
      })

而只是像这样传递序列化对象

     var query = from d in dc.Instruments
                  where d.Src.ToLower().Contains("other.png")
                  group d by d.Src into g
                  select new
                  {
                      count = g.Count(),
                      key = g.Key
                  };

答案 1 :(得分:0)

试试这个:

$.ajax({
  url: urlEditPost,
  method: "POST",
  data: { marketingContactVM: test },
  dataType: "json"
});

答案 2 :(得分:0)

添加contentType属性。这样AP.NET MVC就会知道将请求体反序列化为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'                           
    })
}

PS:你也应该使用data: JSON.stringify(test)