将JSON对象的LIST从javascript发送到MVC操作

时间:2014-05-21 09:19:13

标签: javascript asp.net-mvc json

在我的javascript中,我使用两个属性创建一个类似JSON的对象:ControllerName和WordNumber并将它们添加到数组中。

function TestN() {
                var list = new Array();


            $("*[wordNum]").each(function ()
            {
                var endRes = {
                    ControllerName: this.id,
                    WordNumber: this.getAttribute("wordNum")
                };

                list.push(endRes);


            });


            jQuery.ajax({
                url:' @Url.Action("Translate")' ,
                contentType: "application/json",
                dataType: "json",
                data: { List : JSON.stringify(list) }
,
                traditional: true

            })
        }
    </script>

在.net中,我的这个类具有相同的属性:

public class TranslateModel
    {
        public string ControllerName { get; set; }
        public string WordNumber { get; set; }
    }

这是我的行动+

 public ActionResult Translate(ICollection<TranslateModel> List)
        { return View(); }

您可能认为Translate Action中的List属性为空(模型绑定不起作用);

2 个答案:

答案 0 :(得分:3)

当您使用JSON.stringify(list)时,它会将字符串值发送到控制器操作,而不是对象。

有两种方法 1)要么将字符串发送到控制器的动作,要么将字符串反序列化为对象并使用。

2)将model属性创建为list数组,并将该模型发送到controller action而不使用JSON.stringify。

这里有两个可以帮助你的链接。

- 接近-1

ASP.NET MVC 4 JSON Binding to the View Model - Nested object error

- 方法-2 Passing json list to MVC 3

答案 1 :(得分:0)

尝试将AJAX功能更改为:

jQuery.ajax({
    url: ' @Url.Action("Translate")',
    type: 'POST',
    contentType: "application/json",
    dataType: "json",
    data: JSON.stringify({ 'List': list }),
    traditional: true
});