通过jQuery.Ajax将多个项发送到MVC控制器

如果您使用jQuery之类的序列化表单,它通常会将JSON键和值映射到您要发布到的Controller Action上的对象属性.所以:

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
}

POST:

Name: "Bob"
Age: "999"
Sex: "UnkNown"

有谁知道这是如何工作的?每次我将表单和任何其他数据传递给控制器​​时它都会中断.

我想发送数据的内容以及可以包含任何数量和类型的键/值对的QueryString到控制器.我可以在服务器上提取这些键/值对,因为我无法在方法签名上为它们创建对象.但是,这不能按预期工作.

jQuery的:

function PostForm() {

    $.ajax({
        url: "/Home/TestMVC",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&param2=2

我认为这是因为我实际上已经创建了一个JSON对象作为数据,并将属性设置为对象的名称.

Firebug中出现的POST值有所不同.当我单独发布对象时,POST值是对象/表单的所有键及其对应的值.在第二个例子中有两个简单的属性,我给它们的名称,每个属性包含一个QueryString(Foo = 1& Bar = 2),MVC不能将QueryString映射到一个对象的成员(或者它会出现).

反正有没有像第一次那样开始工作,还要将额外的数据发送到Action的第二个参数?我猜这是为jquery执行表单序列化时创建的所有现有属性添加一个额外的属性.

我真正想要的POST是:

Name: "Bob"
Age: "999"
Sex: "UnkNown"
TheWeirdQueryString: param1=1&param2=2

解决方法

$.ajax方法中的dataType参数是响应的类型(您希望从服务器返回的数据类型),而不是请求.试试这个:
function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

要么:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC" + "?" + $('.additionalParams').serialize(),data: $('#form').serialize()
    });
};

更新:

尝试这个:

控制器:

public void TestMVC(MyObject obj,String[] TheWeirdQueryString)
{
}

客户:

function PostForm() {
    $.ajax({
        url: "/Home/TestMVC",data: $('#form').serialize() + "&" + $('.additionalParams').serialize()
    });
};

但在客户端,您的其他参数必须采用以下格式:

TheWeirdQueryString[0]=param1&TheWeirdQueryString[1]=param2&...&TheWeirdQueryString[n]=paramN

所以$(‘.additionalParams’)元素必须具有“id”和/或“name”属性,如:TheWeirdQueryString [1],TheWeirdQueryString [2] … TheWeirdQueryString [N]

希望这可以帮助

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: <span id=&quot...
jQuery 添加水印 <script src="../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...