【发布时间】:2009-06-16 15:17:57
【问题描述】:
如果您使用 jQuery 之类的东西序列化表单,它通常会将 JSON 键和值映射到您要发布到的控制器操作上的对象的属性。所以:
jQuery:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize(),
complete: callFunction
}
});
假设主要细节包含将参数名称作为键的元素,它们应该直接映射到对象:
行动:
public void TestMVC(MyObject obj)
{
//Obj should now contain the data from the serialised form
}
发布:
Name: "Bob"
Age: "999"
Sex: "Unknown"
有人知道这是如何工作的吗?每次我将表单 和任何其他数据 传递给控制器时,它都会中断。
我想向控制器发送数据的内容以及可以包含任意数量和类型的键/值对的 QueryString。我可以在服务器上提取这些键/值对,因为我无法在方法签名上为它们创建对象。但是,这无法按预期工作。
jQuery:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data:
{
Obj: $('#form').serialize(),
TheWeirdQueryString: $('.additionalParams').serialize(),
}
});
};
行动:
public void TestMVC(MyObject obj, String TheWeirdQueryString)
{
//Obj now does NOT contain the element, it is NULL. Whereas TheWeirdQueryString works fine.
}
帖子:
Obj: name=bob&age=999&sex="unknown"
TheWeirdQueryString: param1=1¶m2=2
我认为这是因为我实际上已经创建了一个 JSON 对象作为数据并将属性设置为对象的名称。
Firebug 中出现的 POST 值存在差异。当我单独发布对象时,POST 值是对象/表单的所有键及其对应的值。在第二个示例中,有两个简单的属性,我给它们的名称,每个都包含一个 QueryString (Foo=1&Bar=2),并且 MVC 不能将 QueryString 映射到对象的成员(或者它会出现)。
到底有没有像在第一个实例中那样开始工作,而且还要向动作的第二个参数发送额外的数据?我猜它是为 jquery 对表单进行序列化时创建的所有现有属性添加一个额外的属性。
我真正想要的 POST 是:
Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1¶m2=2
【问题讨论】:
-
你能发布你在这两种情况下看到的 POST 值吗?我不太明白你的描述。
-
完成。最后一个例子是我正在尝试制作的帖子。
标签: jquery asp.net-mvc json controller arguments