【问题标题】:Using IDictionary in controller method ASP.NET MVC 4/JSON在控制器方法 ASP.NET MVC 4/JSON 中使用 IDictionary
【发布时间】:2013-04-19 10:44:49
【问题描述】:

我正在尝试使用 AJAX 将数据发布回带有 viewModel 的 ASP.NET MVC 控制器,如下所示:

public class FunkyThingUpdateModel
{
   public int FunkyThing_ID{get;set;}
   public string Name{get;set;}
   public IDictionary SizesAvailable{ get; set;}
}

不幸的是,我正在努力让模型绑定器绑定到 IDicationary。 如果在传递给控制器​​的 JSON 中 sizesAvailablenull 则控制器方法被成功调用。但是,如果 sizeAvailable 中有数据,那么我会收到内部服务器错误 500。

我的 JSON 格式如下:

 {"FunkyThing_ID":1,"Name":"Pogo Stick","SizesAvailable":{"1":"Extra
 Large","2":"Extra Tiddly"}}

我不确定的是 - 我是否正在尝试做一些不可能的事情。有没有绑定到 IDictionary 的方法 - 如果没有,最好的选择是什么?

或者我的 JSON 是否只需要以不同的方式格式化?

我在这里发现了许多类似的问题,但大多数都相当老了。

似乎有一些迹象表明这在我正在使用的 MVC 4 中是可能的 - 但我可能误解了上下文。

【问题讨论】:

    标签: ajax json asp.net-mvc-4


    【解决方案1】:

    未测试,但我认为您必须为要创建的对象指定通用接口定义。

    public IDictionary<int, string> SizesAvailable{ get; set;}
    

    您还必须更改 ajax 定义中的数据以将 SizesAvailable 作为数组通知

    $.ajax({
        url:'your url', 
        type: 'post', 
        contentType : 'application/json', 
        data: JSON.stringify({FunkyThing_ID:1, Name:"Pogo Stick", SizesAvailable:[{key: 1, value:"Extra Large"},{key:2, value: "Extra Tiddly"}]}), 
        success: function(response){
            console.log(response);
        }
    });
    

    编辑

    如果您的意图是只获取大小的字符串数组(不是字典),请更改

    public string[] SizesAvailable{ get; set;}
    

    并将数据发送为,

    data: JSON.stringify({FunkyThing_ID:1, Name:"Pogo Stick", SizesAvailable:["Extra Large","Extra Tiddly"]}), 
    

    希望这会有所帮助。

    【讨论】:

    • 谢谢你知道了。我在字典之后,键是 ID。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多