发送的多个项目,视控制器通过的!阿贾克斯
-
05-07-2019 - |
题
如果答序列化的一种形式使用类似jQuery,它将经常地图id键的和价值的性质的对象上控制行动张贴。所以:
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"
没有人知道这是怎么运作的?它打破了每一次我穿的形式 和任何附加数据 控制器。
我想送内容的数据以及一个查询其中可能包含的任何数量和类型的关键值对控制器。我能提取这些关键值对于该服务器由于我无法创造一个对象他们在该方法的签名。然而,这一失败工作作为目的。
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对象的数据和定性的名称的对象。
是有区别的后的数值显示在萤火虫.当我后对象单独的后的数值是所有的钥匙的对象形成与其相应的价值。在第二个例子是有两个简单的性质,我的名字给他们,每个都包含一个查询(Foo=1&Bar=2
)和视不映一个查询成员的对象(或因此,它会出现)。
反正有在所有为获得工作,就像它在第一个实例中,而且发送的额外数据的第2次辩论的行动?我猜这是添加一个额外的财产的所有现有的时创建jquery的电子监管的形式。
后实际上我想要是:
Name: "Bob"
Age: "999"
Sex: "Unknown"
TheWeirdQueryString: param1=1¶m2=2
解决方案
数据类型参数美元.阿贾克斯的方法是响应的类型(数据的类型你期望从服务器),而不请求。试试这个代替:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
});
};
或者:
function PostForm() {
$.ajax({
url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(),
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize()
});
};
更新:
试试这个:
控制器:
public void TestMVC(MyObject obj, String[] TheWeirdQueryString)
{
}
客户:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
});
};
但在客户的侧您的附加参数,必须在以下格式:
TheWeirdQueryString[0]=param1&TheWeirdQueryString[1]=param2&...&TheWeirdQueryString[n]=paramN
因此$('.additionalParams')元素必须具有"id"和/或"名"属性,如:TheWeirdQueryString[1],TheWeirdQueryString[2]...TheWeirdQueryString[N]
希望这可以帮助
其他提示
数据是一个对象
...
data: {
x :$('#form').serialize(),
y:'something else'
}
...
另一个解决方案,如果你想要一个词典的key/value对:
public void TestMVC(MyObject obj, IDictionary<string, object> TheWeirdQueryString)
{
}
客户:
function PostForm() {
$.ajax({
url: "/Home/TestMVC",
type: "POST",
dataType: "application/JSON",
data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
});
};
$('.additionalParams').serialize()格式:
TheWeirdQueryString[0].Key=param0&TheWeirdQueryString[0].Value=value0&TheWeirdQueryString[1].Key=param1&TheWeirdQueryString[1].Value=value1&...&TheWeirdQueryString[n].Key=paramN&TheWeirdQueryString[n].Value=valueN
更新:
你需要的东西,像这样:
<input class="additionalParams" type="text" name="TheWeirdQueryString[0].Key" value="param0" />
<input class="additionalParams"type="text" name="TheWeirdQueryString[0].Value" value="value0" />
<!-- ... -->
<input class="additionalParams"type="text" name="TheWeirdQueryString[n].Key" value="paramN" />
<input class="additionalParams"type="text" name="TheWeirdQueryString[n].Value" value="valueN" />