jQuery的:@H_404_3@
function PostForm() { $.ajax({ url: "/Home/TestMVC",type: "POST",dataType: "application/JSON",data: $('#form').serialize(),complete: callFunction } });
假定主要细节包含将参数名称作为键的元素,它们应直接映射到对象:@H_404_3@
行动:@H_404_3@
public void TestMVC(MyObject obj) { //Obj should now contain the data from the serialised form }
POST:@H_404_3@
Name: "Bob" Age: "999" Sex: "Unknown"
有谁知道这是如何工作的?每次我将表单和任何其他数据传递给控制器时它都会中断.@H_404_3@
我想发送数据的内容以及可以包含任何数量和类型的键/值对的QueryString到控制器.我可以在服务器上提取这些键/值对,因为我无法在方法签名上为它们创建对象.但是,这不能按预期工作.@H_404_3@
jQuery的:@H_404_3@
function PostForm() { $.ajax({ url: "/Home/TestMVC",data: { Obj: $('#form').serialize(),TheWeirdQueryString: $('.additionalParams').serialize(),} }); };
行动:@H_404_3@
public void TestMVC(MyObject obj,String TheWeirdQueryString) { //Obj now does NOT contain the element,it is NULL. Whereas TheWeirdQueryString works fine. }
帖子:@H_404_3@
Obj: name=bob&age=999&sex="unknown" TheWeirdQueryString: param1=1¶m2=2
我认为这是因为我实际上已经创建了一个JSON对象作为数据,并将属性设置为对象的名称.@H_404_3@
Firebug中出现的POST值有所不同.当我单独发布对象时,POST值是对象/表单的所有键及其对应的值.在第二个例子中有两个简单的属性,我给它们的名称,每个属性包含一个QueryString(Foo = 1& Bar = 2),MVC不能将QueryString映射到一个对象的成员(或者它会出现).@H_404_3@
反正有没有像第一次那样开始工作,还要将额外的数据发送到Action的第二个参数?我猜这是为jquery执行表单序列化时创建的所有现有属性添加一个额外的属性.@H_404_3@
我真正想要的POST是:@H_404_3@
Name: "Bob" Age: "999" Sex: "Unknown" TheWeirdQueryString: param1=1¶m2=2
解决方法
function PostForm() { $.ajax({ url: "/Home/TestMVC",data: $('#form').serialize() + "&" + $('.additionalParams').serialize() }); };
要么:@H_404_3@
function PostForm() { $.ajax({ url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(),data: $('#form').serialize() }); };
更新:@H_404_3@
尝试这个:@H_404_3@
控制器:@H_404_3@
public void TestMVC(MyObject obj,String[] TheWeirdQueryString) { }
客户:@H_404_3@
function PostForm() { $.ajax({ url: "/Home/TestMVC",data: $('#form').serialize() + "&" + $('.additionalParams').serialize() }); };
但在客户端,您的其他参数必须采用以下格式:@H_404_3@
TheWeirdQueryString[0]=param1&TheWeirdQueryString[1]=param2&...&TheWeirdQueryString[n]=paramN
所以$(‘.additionalParams’)元素必须具有“id”和/或“name”属性,如:TheWeirdQueryString [1],TheWeirdQueryString [2] … TheWeirdQueryString [N]@H_404_3@
希望这可以帮助@H_404_3@