通过Ajax将多个值传递给MVC控制器

时间:2014-03-13 09:46:34

标签: jquery asp.net-mvc

这是Ajax Call:

        var selectedProductOptions = new Array();

    $(".optionSelectionBox").each(function () {
        selectedProductOptions.push($(this).val());
    });

$.ajax({
        url: "/Cart/AddItem",
        type: 'post',

        data: JSON.stringify({ 
            productId : @Html.ValueFor(m => m.Product.Id),
            selectedOptions : selectedProductOptions,
        }),
        success: function (data) {
            if (data.IsSuccess) {
                alert("test Hello Success");
            }

            alert("test HELLO Fail");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown + "- Error");
        }
    });

这是接听电话的控制器。

    [HttpPost]
    public JsonResult AddItem(string productId, List<string> selectedOptions)
    {
     //Code here        
    }

当我在动作上设置一个断点时,它会被命中,这就是我想要的但是...... productId和selectedOptions都是NULL。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

删除,

中的selectedOptions : selectedProductOptions,
data: JSON.stringify({ 
        productId : @Html.ValueFor(m => m.Product.Id),
        selectedOptions : selectedProductOptions
    }),

修改

试试这个

 data: {
 productId: @Html.ValueFor(m = > m.Product.Id),
 selectedOptions: JSON.stringify(selectedProductOptions)
 },

答案 1 :(得分:1)

你也可以做这样的事情:

创建新类:

public class AddItemModel
    {
        public List<string> selectedOptions { get; set; }
        public string productId { get; set; }
    }

并修改您的代码:

public JsonResult AddItem(AddItemModel aim)

和ajax电话:

data: JSON.stringify({
                    aim: {
                        productId : @Html.ValueFor(m => m.Product.Id),
                        selectedOptions : selectedProductOptions                           
                    }

这也应该有用

答案 2 :(得分:0)

确定它正在工作....: - )

这是我的解决方案,希望它能帮助别人。

这是控制器动作:

    [HttpPost]
    public JsonResult AddItem(string formData)
    {

    var js = new JavaScriptSerializer();
    AddItemModel addItemModel  = js.Deserialize<AddItemModel>(formData);


   //Other Code here

        return new JsonResult();
    }

    public class AddItemModel
    {
        public List<string> selectedOptions { get; set; }
        public string productId { get; set; }
    }

这是Ajax调用:

$.ajax({
        url: "/Cart/AddItem",
        type: 'post',

        data: "formData=" + JSON.stringify(cartItem),
        success: function (data) {
            if (data.IsSuccess) {
                alert("test Hello Success");
            }

            alert("test HELLO Fail");
        },
        error: function (jqXHR, textStatus, errorThrown) {
            alert(errorThrown + "- Error");
        }
    });

这样做似乎有很多不同的方法,这次我得到了这个工作,但我仍然不知道为什么第一种方式不起作用,会喜欢一些真正了解这一点的人解释为什么它不起作用,以及在幕后发生了什么。

谢谢你们......继续下一个。