ASP MVC 3使用AJAX和JQUERY提交url参数

时间:2012-09-25 06:20:05

标签: asp.net-mvc jquery

我使用ASP.NET MVC3,AJAX和JQUERY时遇到了问题。我有以下功能

[HttpPost]
public bool Update(int id, FormCollection collection)

这是我的jQuery来源:

$(document).ready(function () {
    $('#btnUpdate').click(function (e) {
        // Cancel default action
        e.preventDefault();
        var formCollection = $('#formId').serialize();
        $.ajax({
            cache: false,
            type: 'POST',
            url: '@Url.Action("Action","Controller")',
            data: { id: $('#id').val(), collection: formCollection },
            success: function (data) {
                alert(data);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
            }
        });
    });
});

id参数已成功提交,但集合(FormCollection)包含一个{[0]:10000,[1]:collection}的数组。我无法解决问题。当我重新设计这样的解决方案时:

[HttpPost]
public bool Update(FormCollection collection)

$(document).ready(function () {
    $('#btnUpdate').click(function (e) {
        // Cancel default action
        e.preventDefault();
        $.ajax({
            cache: false,
            type: 'POST',
            url: '@Url.Action("Action", "Controller")',
            data: $('#formId').serialize(),
            success: function (data) {
                alert(data);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
            }
        });
    });
});
一切正常。我在传递2个参数时做错了什么?

THX !!!

4 个答案:

答案 0 :(得分:1)

尝试在JSON上调用JSON.stringify():

data: JSON.stringify({ id: $('#id').val(), collection: formCollection })

答案 1 :(得分:1)

$(document).ready(function () {
    $('#btnUpdate').click(function (e) {
        // Cancel default action
        e.preventDefault();
        var formCollection = $('#formId').serialize();
        $.ajax({
            cache: false,
            type: 'POST',
            url: '@Url.Action("Action","Controller")',
            data: JSON.stringify({ id: $('#id').val(), collection: formCollection }),
            success: function (data) {
                alert(data);
            },
            error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
            }
        });
    });
});

你应该用jsonstringify

传递数据

答案 2 :(得分:0)

这是实际的手表: Debugging

成功提交参数ID(Name = id,Wert = 10000)。在id之上你可以看到formCollection,包括ajax调用的FORM.serialize()值。但System.Web.Mvc.FormCollection仅包括两个键: id 集合!我期待

  1. “名称”
  2. “地址”
  3. “Address_2”
  4. ...
  5. 我认为如果在创建我的ajax请求时出错,但我不知道为什么......

    var customerNo = $('#fieldID').val();
    var formCollection = $('#formID').serialize();
    $.ajax({
        cache: false,
        type: 'POST',
        url: '@Url.Action("Action", "Controller")',
        data: { id: customerNo, collection: formCollection },
        dataType: 'json',
        success: function (data) {
            if (data) {
                alert(data);
            };
        },
        error: function (xhr, ajaxOptions, thrownError) {
            alert('Error during process: \n' + xhr.responseText);
        }
    });
    

    以下行生成错误:

    data: JSON.stringify({ id: customerNo, collection: formCollection })
    

    参数字典包含非可空类型'System.Int32'的空条目“id”...

    更改无效:

    data: { id: customerNo, collection: JSON.stringify(formCollection) },
    

    有什么想法吗?

答案 3 :(得分:0)

这是我的想法(有效!)

从模型中添加一个字符串属性的部分类,在“数据”中手动添加此属性。

<强> JS:

$.ajax({
        cache: false,
        type: 'POST',
        url: '@Url.Action("Action", "Controller")',
        data: $("form").serialize() + "&id=whatever",
        dataType: 'json',
        success: function (data) {
                if (data) {
                        alert(data);
                };
        },
        error: function (xhr, ajaxOptions, thrownError) {
                alert('Error during process: \n' + xhr.responseText);
        }
});

partialClass.cs模型:

public partial class TableName
{
    public string id { get; set; }
}

<强>控制器:

[HttpPost]
public bool Update(FormCollection collection){
    var ID = collection.id; 
}

问候!