1

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

我的阿贾克斯电话:

                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);
                    }
                });

这是我的动作控制器:

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

    }

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

谢谢

4

1 回答 1

2

这不是一件直截了当的事情,但这是一种方法。首先将您的ajax方法更改为:

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

然后在控制器中,您需要使用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; }
}
于 2012-04-13T09:17:12.557 回答