Jquery发布到带有字典参数的Action

时间:2011-08-08 15:35:37

标签: javascript jquery asp.net-mvc asp.net-mvc-2 automapping

我感觉dejavu,但我找不到答案: 在检查jQ $ .post调用时,我有一个对象数组需要看起来像这样:

limiter[0].Key
limiter[0].Value

以便在行动中映射

public ActionResult SomeAction(Dictionary<Guid, string> dictionary) { }

然而,这个javascript:

// Some Guid and Some Value
var param = [ { 'Key' : '00000000-0000-00000-000000', 'Value': 'someValue' } ];

$.post('/SomeController/SomeAction/',
       {
       dictionary: limiter,
       otherPostData: data
       },
       function(data) {
          callback(data);
       }
)

在用firebug检查时产生这个:

limiter[0][Key] = someKey // Guid Value
limiter[0][Value] = someValue

这是在jq 1.4.2中。我似乎记得你需要设置一些标志来在jQ中以不同的方式渲染json。这会响铃吗?

5 个答案:

答案 0 :(得分:5)

试试这样:

var param = {
    '[0].Key': '28fff84a-76ad-4bf6-bc6d-aea4a30869b1', 
    '[0].Value': 'someValue 1',

    '[1].Key': 'd29fdac3-5879-439d-80a8-10fe4bb97b18', 
    '[1].Value': 'someValue 2',

    'otherPostData': 'some other data'
};

$.ajax({
    url: '/Home/SomeAction/',
    type: 'POST',
    data: param,
    success: function (data) {
        alert(data);
    }
});

应映射到以下控制器操作:

public ActionResult SomeAction(Dictionary<Guid, string> dictionary, string otherPostData) 
{ 
    ...
}

答案 1 :(得分:3)

TRUE

只需将您的obj作为dataType发送:&#34; json&#34;

答案 2 :(得分:1)

您可以使用此标志 -

jQuery.ajaxSetting.traditional = true;

让jQuery以不同的格式将数据发布到您正在看到的格式。有关详细信息,请参阅此问题 -

Passing arrays in ajax call using jQuery 1.4

答案 3 :(得分:0)

您会看到post param为limiter[0][Key],因为jquery会在发布之前序列化json数据。这可以通过控制器操作很好地解释,并且您可以在操作中获得所需的输入。

答案 4 :(得分:0)

您还可以使用对象列表,结果将与您想要的结果相同。这是一个很好的例子。

http://www.mikesdotnetting.com/Article/96/Handling-JSON-Arrays-returned-from-ASP.NET-Web-Services-with-jQuery