【问题标题】:work with array passed by jquery to actioncontroller asp.net mvc 3使用 jquery 传递给 actioncontroller asp.net mvc 3 的数组
【发布时间】:2012-04-12 15:22:03
【问题描述】:

我想知道如何在 jquery ajax 调用传递的 asp.net mvc3 控制器数组中进行迭代

我的 Ajax 调用:

                var array = [];
                array.push({ dir: id });
                array.push({ dirToCreate: $("#txtDir").val() });

                $.ajax({
                    Type: 'GET',
                    url: '/Home/CreateFolder/',
                    data: { 'list': array },
                    traditional: true,
                    cache: 'true',
                    success: function (result) {
                        alert(result);
                    }
                });

这是我的 ActionController:

    public ActionResult CreateFolder (IEnumerable<string> list  )
    {
        // how to iterate through the values passed
        return Content("ok");

    }

实际上,我可以像在ActionController CreateFolder 方法object object 中获得的那样将数组传递给ActionController 吗?

谢谢

【问题讨论】:

    标签: c# jquery asp.net-mvc arrays asp.net-mvc-3


    【解决方案1】:

    这不是一件简单的事情,但这是一种方法。首先将您的ajax方法更改为:

    $.ajax({
            type: 'post',
            datatype: 'json',
            url: '/Home/CreateFolder',
            traditional: true,
            data: { list: JSON.stringify(array)},
            success: function (result) {
                alert(result);
            }
        });
    

    然后在 Controller 中,您需要使用 JavascriptSerializer 类反序列化 json。在我的示例中,我使用了一个名为文件夹的类,它在控制器代码下方注明。您不必使用这种类型,如果您想通过并在其他地方使用它,它看起来更干净。在控制器中执行以下操作:

        [HttpPost]
        public ActionResult CreateFolder(string list)
        {
            var js = new JavaScriptSerializer();
            var deserializedObject = (object[])js.DeserializeObject(list);
            var myFolders = new List<Folder>();
    
            if (deserializedObject != null)
            {
                foreach (Dictionary<string, object> newFolder in deserializedObject)
                {
                    myFolders.Add(new Folder(newFolder));
                }
            }
    
            return Json("");
        }
    

    这是我上面使用的Folder 类型,以及采用新文件夹的构造函数:

    public class Folder
    {
        public Folder(Dictionary<string, object> newFolder)
        {
            if (newFolder.ContainsKey("dir"))
            {
                Directory = (string)newFolder["dir"];
            }
            if (newFolder.ContainsKey("dirToCreate"))
            {
                DirectoryToCreate = (string)newFolder["dirToCreate"];
            }
        }
        public string Directory { get; set; }
        public string DirectoryToCreate { get; set; }
    }
    

    【讨论】:

    • 嗨,似乎是一个很好的解决方案,你的 jquery 代码与我所说的区别是 JSON.stringify(),当我们从 jquery 传递 json 类型数据时,我们是否需要始终传递为JSON.stringify() 类型?,我看到的一些代码没有用于将 json 数据传递给 actioncontroller,我们是否每次都必须指定它?
    • 我在我的 Ajax 调用中指定了 datatype: json,这是唯一的区别(我错过了 Ajax 调用中的缓存行,但你可以添加它没有区别)。我只使用 json.stringify 因为在这种情况下我们使用的是 JavaScript 数组 :)
    猜你喜欢
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-28
    • 2016-02-21
    相关资源
    最近更新 更多