【问题标题】:MVC3 Pass back List of Objects with ListsMVC3 用列表传回对象列表
【发布时间】:2012-09-11 00:22:59
【问题描述】:

我需要将包含数组的对象数组从 javascript 传递到 MVC actionresult 方法。基本上我有一个 KeyValuePair,它的键是一个字符串数组,我需要传回这些 KeyValuePair 的列表。在代码中,我有一个我已更改的键列表,以及一个包含键-> 值对的 JS 对象。我尝试传回的 javascript 对象的格式应该与我的班级相同。我也尝试过对其进行 JSON 化,但没有成功。

谢谢。

public class ChangedItem
{
    public IEnumerable<string> Key { get; set; }
    public int Value { get; set; }

    public ChangedItem()
    {
    }

    public ChangedItem(IEnumerable<string> key, int value)
    {
        Key = key;
        Value = value;
    }
}

[HttpPost]
public ActionResult UpdateResults(IEnumerable<ChangedItem> changedItems)
{
    return RedirectToAction("Index");
}

function getChangedItems() {
    var ChangedItems = new Array();
    for (var i = 0; i < _ChangedItemKeys.length; i++) {
        var ChangedItem = {};
        ChangedItem.Key = _ChangedItemKeys[i];
        ChangedItem.Value = _ChangedItems[_ChangedItemKeys[i]];
        ChangedItems[i] = ChangedItem;
    }
    return ChangedItems;
}

function submitNewVals() {
    $.ajax({
        url: '/Home/UpdateResults',
        type: 'POST',
        dataType: 'json',
        data:
        {
            changedItems: getChangedItems()
        }
    });
}

我的请求数据详细如下,我的操作结果中有 6 个项目,只是在每个项目中,键为空,值为 0:

changedItems[0][Key][]:BoxeR
changedItems[0][Key][]:Proleague
changedItems[0][Key][]:Total
changedItems[0][Key][]:2005
changedItems[0][Key][]:Quarter 2
changedItems[0][Key][]:Actual
changedItems[0][Value]:123
changedItems[1][Key][]:BoxeR
changedItems[1][Key][]:Proleague
changedItems[1][Key][]:Team
changedItems[1][Key][]:2005
changedItems[1][Key][]:Quarter 1
changedItems[1][Key][]:Actual
changedItems[1][Value]:123
changedItems[2][Key][]:BoxeR
changedItems[2][Key][]:Proleague
changedItems[2][Key][]:Team
changedItems[2][Key][]:2005
changedItems[2][Key][]:Quarter 1
changedItems[2][Key][]:Estimate
changedItems[2][Value]:123
changedItems[3][Key][]:BoxeR
changedItems[3][Key][]:Proleague
changedItems[3][Key][]:Team
changedItems[3][Key][]:2005
changedItems[3][Key][]:Quarter 2
changedItems[3][Key][]:Actual
changedItems[3][Value]:123
changedItems[4][Key][]:BoxeR
changedItems[4][Key][]:Proleague
changedItems[4][Key][]:Team
changedItems[4][Key][]:2005
changedItems[4][Key][]:Quarter 2
changedItems[4][Key][]:Estimate
changedItems[4][Value]:123

我尝试在 fiddler 中玩耍并更改请求数据格式(使用 .Key[x]、.Value),但没有任何效果。

谢谢!

【问题讨论】:

    标签: c# javascript ajax asp.net-mvc


    【解决方案1】:

    格式应该是这样的:

    changedItems[0].Key[0]=BoxeR
    changedItems[0].Key[1]=Proleague
    changedItems[0].Key[2]=Total
    changedItems[0].Key[3]=2005
    changedItems[0].Key[4]=Quarter 2
    changedItems[0].Key[5]=Actual
    changedItems[0].Value=123
    ...
    

    详情请见ASP.NET Wire Format for Model Binding to Arrays, Lists, Collections, Dictionaries

    【讨论】:

    • 嗨,谢谢。你知道如何让 .ajax() 使用这种格式,而不是通过创建一堆输入 + 一个表单来“伪造”它吗?
    • 如果您执行 GET 请求,您可以将它们添加到查询参数中,这样就可以正常工作。否则,您可以显式设置要发送的数据,并且您只需确保为要发送的值构建适当的键名。
    【解决方案2】:

    抱歉,您的返回数据类型是 json 并且您传递了数组,请更改您的代码 返回类型JsonResult

    return Json(ChangedItems, JsonRequestBehavior.AllowGet);
    

    this link

    【讨论】:

    • 虽然这是正确的并且是一个很好的提示,但它并不能回答手头的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2013-12-20
    • 1970-01-01
    • 2015-04-30
    • 2012-06-23
    • 1970-01-01
    相关资源
    最近更新 更多