通过Ajax将Var和List传递给Controller

时间:2014-01-21 05:30:50

标签: c# javascript jquery ajax knockout.js

我有一个文本框和一个选择选项多个,我在viewModel中使用knockout selectedOptions存储所有选定的项目。

如果我尝试使用ajax将捕获的信息传递给我的控制器,我将无法接收我的MetricsChosenModel。

            var MetricsChosenModel= window.vm.MetricsChosenModel();
            var ApplicationsNameValue = $.trim($("#add-Applications").val());
            if (ApplicationsNameValue.length <= 0) {
                $("#text-add-Applications").popover('show');
            }
                $.ajax({
                    url: '/Admin/AddApplications',
                    type: "POST",
                    dataType: "JSON",
                    data: { ApplicationsName: ApplicationsNameValue, MetricsChosenModel: MetricsChosenModel },
                    success: function (returndata) {
                        if (returndata == true) {
                        }
                        else {

                        }
                    },
                    error: function () {
                    }
                });

我的控制器

    public ActionResult AddApplications(string ApplicationsName,List<string> MetricsChosenModel)
    {

        //Code here
        return View();
    }

My MetricsChosenModel以下列格式存储数据 MetricsChosenModel [0] =&gt;五 MetricsChosenModel [1] =&gt; 6

为什么我无法收到MetricsChosenModel的列表值,但我能够收到ApplicationsName,

如果有人可以解释,我在这里怎么错,也会很棒,

谢谢,

2 个答案:

答案 0 :(得分:1)

如果不知道您的路由是什么样的,很难确定问题的确切来源。如果我不得不猜测,我会说你通过URL(路由或查询字符串参数)得到ApplicationsName值。如果是这种情况,您可以将[FromBody]属性添加到MetricsChosenModel。但请注意,每个方法签名只允许一个FromBodyAttribute。如果您需要更多变量,这个问题的一个简单解决方案是创建一个模型,其中包含您希望在控制器操作中接收的每个属性。

希望有所帮助!

答案 1 :(得分:1)

我自己使用ASP.NET MVC遇到了这个问题:向控制器发送带有一些字段和一个或多个数组的模型将无法正确地将数组内容放入C#模型中。以下对ajax调用的更改每次都为我修复:

            $.ajax({
                url: '/Admin/AddApplications',
                type: "POST",
                contentType: 'application/json; charset=utf-8', // ADD THIS
                dataType: "JSON",
                data: JSON.stringify({ ApplicationsName: ApplicationsNameValue, MetricsChosenModel: MetricsChosenModel }), // Also added JSON.stringify
                success: function (returndata) {
                    if (returndata == true) {
                    }
                    else {

                    }
                },
                error: function () {
                }
            });

'content-type'和'JSON.stringify'帮助MVC转换模型。如果这对你有帮助,请告诉我。)