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