繁体   English   中英

将 Javascript 数组传递给 ASP.NET MVC Controller

[英]Passing Javascript array to ASP.NET MVC Controller

我有以下 javascript class 我试图传递给 ASP.NET MVC Controller

 var postParams = {

         attributes : [
                         {
                            name : '',
                            description: '',
                            attributeType : '',
                            value : ''
                        }
                      ]
    };

 postParams.attributes[0] = new Object();
 postParams.attributes[0].name = "test";
 postParams.attributes[0].description = "test";
 postParams.attributes[0].attributeType = "test";
 postParams.attributes[0].value = "test";

以下是我如何调用 Controller 方法:

  var actionURL = "@Url.Action("Save", "Catalog")";
  $.ajax({
                    type: "POST",
                    url: actionURL,
                    data:  postParams   ......

在 Controller 方面,我声明了一个 ViewModel,如下所示:

 public class AttributeViewModel
 {
    public string name { get; set; }
    public string description { get; set; }
    public string attributeType { get; set; }
    public string value { get; set; } 
 }

我的Controller保存方法声明如下:

 public JsonResult Save(AttributeViewModel[] attributes)

当我执行时,属性的值始终是 null。

有任何想法吗? 不知道如何开始调试这个。

您可以尝试json.net库来解决您的问题

  [JsonFilter(Param = "attributes", JsonDataType = typeof(AttributeViewModel[]))]
  public JsonResult Save(AttributeViewModel[] attributes)

在客户端:

$.ajax({
        type: 'POST',
        url: url,
        async: true,
        data:  JSON.stringify(attributes), //!!! Here must be the same name as in controller method
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {

        },
        error: function (xhr, ajaxOptions, thrownError) {

        }
    });

似乎您需要添加traditional: true到 ajax 调用。 看看这里这里

 $.ajax({ 
                traditional: true,
                type: "POST", 
                url: actionURL, 
                data:  postParams   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM