我有这个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
答案 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)
。