【问题标题】:C# Dictionary to Kendo DataSourceC# 字典到剑道数据源
【发布时间】:2015-12-01 19:18:57
【问题描述】:

我不确定这是否可能,但我想我会问是否有人这样做过。

我有一本包含美国 50 个州的缩写和全名的州词典。我想要做的是将此字典加载到可以与 Kendo Dropdown 一起使用的 Kendo DataSource 中。但是,我无法找出正确的解决方法。

我尝试将其转换为 JSON 字符串并以这种方式加载,但 Kendo 感到困惑并且不知道它究竟在加载什么。

这是我的字典:

 public static Dictionary<string, string> USStates
    {
        get
        {
            var states = new Dictionary<string, string>();

            states.Add("AL", "Alabama");
            states.Add("AK", "Alaska");
            states.Add("AZ", "Arizona");
            states.Add("AR", "Arkansas");
            states.Add("CA", "California");
            states.Add("CO", "Colorado");
            states.Add("CT", "Connecticut");
            states.Add("DE", "Delaware");
            states.Add("FL", "Florida");
            states.Add("GA", "Georgia");
            states.Add("HI", "Hawaii");
            states.Add("ID", "Idaho");
            states.Add("IL", "Illinois");
            states.Add("IN", "Indiana");
            states.Add("IA", "Iowa");
            states.Add("KS", "Kansas");
            states.Add("KY", "Kentucky");
            states.Add("LA", "Louisiana");
            states.Add("ME", "Maine");
            states.Add("MD", "Maryland");
            states.Add("MA", "Massachusetts");
            states.Add("MI", "Michigan");
            states.Add("MN", "Minnesota");
            states.Add("MS", "Mississippi");
            states.Add("MO", "Missouri");
            states.Add("MT", "Montana");
            states.Add("NE", "Nebraska");
            states.Add("NV", "Nevada");
            states.Add("NH", "New Hampshire");
            states.Add("NJ", "New Jersey");
            states.Add("NM", "New Mexico");
            states.Add("NY", "New York");
            states.Add("NC", "North Carolina");
            states.Add("ND", "North Dakota");
            states.Add("OH", "Ohio");
            states.Add("OK", "Oklahoma");
            states.Add("OR", "Oregon");
            states.Add("PA", "Pennsylvania");
            states.Add("RI", "Rhode Island");
            states.Add("SC", "South Carolina");
            states.Add("SD", "South Dakota");
            states.Add("TN", "Tennessee");
            states.Add("TX", "Texas");
            states.Add("UT", "Utah");
            states.Add("VT", "Vermont");
            states.Add("VA", "Virginia");
            states.Add("WA", "Washington");
            states.Add("WI", "Wisconsin");
            states.Add("WY", "Wyoming");

            return states;
        }
    }

将状态作为 Json 结果返回:

public JsonResult GetStates()
{
    var states = States.USStates;
    return Json(states, JsonRequestBehavior.AllowGet);
}

尝试将它们加载到 Kendo 下拉菜单中:

    function stateFilter(element) {
    element.kendoDropDownList({
        dataTextField: "Key",
        dataValueField: "Value",
        dataSource: new kendo.data.DataSource({
            transport: {
                read: {
                    url: "/Admin/Company/GetStates",
                    dataType: "json"
                }
            }
        }),
        optionLabel: "-- Select Value --"
    });
}

我认为问题出在我告诉 Kendo 它应该查看项目的文本和价值的地方。

当我尝试这样做时,我得到了

的错误

Uncaught TypeError: e.slice is not a function in kendo.all.min.js:11

这是返回的 Json 的部分结果:

{"AL":"Alabama","AK":"Alaska","AZ":"Arizona","AR":"Arkansas"}

任何正确方向的指导都将不胜感激!

【问题讨论】:

  • /admin/company/getstates 中的 JSON 格式是否正确?这个反应是什么样的?使用邮递员或类似的。
  • @JonR。我在我的 JSON 外观的帖子中添加了一个代码片段
  • 那么结果将是一个具有属性 AL、AK、A​​Z、AR 的对象,没有名称为 Value 或 Key。我希望看到如下结果: [{"key":"AL", "value":"Alabama"}, {"key":"AK", "value":"Alaska"}] 对象数组具有属性键和值
  • @JonR。我该怎么做呢?抱歉,我对这一切仍然很陌生,并试图理解它。我仍然可以为此使用字典还是需要使用其他东西?
  • 你可以映射你从服务器返回的结果,你仍然会从同一个源读取,只需在数据源中使用它之前处理响应

标签: c# json kendo-ui


【解决方案1】:

你只需要:

return Json(states.ToList(), JsonRequestBehavior.AllowGet);

states.ToList()转换成List&lt;KeyValuePair&lt;string,string&gt;&gt;,KeyValuePair有属性Key和Value

【讨论】:

    【解决方案2】:

    基于其他一些关于从 C# 返回字典的阅读,它会是这样的。

    string jsonString = "[";
    foreach(var item in State.USStates)
    {
        jsonString += string.Format("{"\key\":\"{0}\",\"value\":\"{1}\"},",item.Key,item.Value);
    }
    jsonString += "]";
    return Json(jsonString,JsonRequestBehavior.AllowGet)
    

    【讨论】:

      猜你喜欢
      • 2016-08-18
      • 1970-01-01
      • 1970-01-01
      • 2013-08-29
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多