【问题标题】:How to bind list of string in kendo dropdownlist如何在剑道下拉列表中绑定字符串列表
【发布时间】:2016-11-14 13:42:10
【问题描述】:

您好,我正在为 ASP.NET MVC 使用 Kendo。

我有包含数据的字符串列表

[0]="str1"
[1]="str2"... and so on

现在我想将这个字符串列表绑定到 kendo 下拉列表中。

我已经通过具有名称和 ID 的类列表绑定下拉列表,但字符串列表中只有一个数据,我不知道如何绑定它!

我已经这样做了:

 @(
                 Html.Kendo().DropDownList()
                            .Name("ddlstrings")
                            .DataTextField("stringname")
                            .DataValueField("stringname")
                            //.Events(x => x.Select("sourceclick"))
                            .SelectedIndex(0)
                            .DataSource(source =>
                                {
                                    source.Read(read =>
                                    {
                                        read.Action("getData", "String");
                                    });
                                })
                )

但我没有定义。

我正在返回这样的数据:

public JsonResult getData()
        {
            try
            {
                List<string> stringlist = object.getstrlist();
                return Json(stringlist, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                return Json("", JsonRequestBehavior.AllowGet);
            }
        }

有谁知道我该怎么做!

任何帮助将不胜感激。

【问题讨论】:

  • getData Action 的返回类型是什么?
  • 通过 字符串列表 你的意思是一个 javascript 数组或一个 c# 列表?
  • 返回类型为 json,返回数据来自 c# 的字符串列表,我更新了问题,请查看,以便您更好地理解。

标签: c# asp.net-mvc kendo-ui kendo-asp.net-mvc kendo-dropdown


【解决方案1】:

不知道好不好,但通过一些手动工作得到了解决方案:

var selectList = new List<SelectListItem>();

foreach (var element in stringlist)
                {
                    selectList.Add(new SelectListItem
                    {
                        Value = element.ToString(),
                        Text = element.ToString()
                    });
                }

return Json(selectList, JsonRequestBehavior.AllowGet);

在视图侧:

@(
                 Html.Kendo().DropDownList()
                            .Name("ddlstrings")
                            .DataTextField("Text")
                            .DataValueField("Value")
                            //.Events(x => x.Select("sourceclick"))
                            .SelectedIndex(0)
                            .DataSource(source =>
                                {
                                    source.Read(read =>
                                    {
                                        read.Action("getData", "String");
                                    });
                                })
                )

【讨论】:

    【解决方案2】:

    您提供的答案实际上是正确的。 Action 必须返回 List&lt;SelectListItem&gt; 作为输出。 See this Example 并在代码中查看 BindTo 属性。

    您可以将代码更新到下面。

            public JsonResult getData()
            {
                try
                {
                    var stringlist = object.getstrlist().select( x=> new SelectListItem
                                 {
                                  Value = x,
                                  Text = x
                                 }).ToList();
    
    
                    return Json(stringlist, JsonRequestBehavior.AllowGet);
                }
                catch (Exception ex)
                {
                    return Json("", JsonRequestBehavior.AllowGet);
                }
            }
    

    我刚刚修改了您的代码,使其没有 for 循环。

    【讨论】:

    • 哦,是的,不需要使用 for 循环。谢谢它减少了我的代码。
    【解决方案3】:

    试试 ValuePrimitive:

                        Html.Kendo().DropDownList()
                            .Name("ddlstrings")
                            .ValuePrimitive(true)
                            .SelectedIndex(0)
                            .DataSource(source =>
                                {
                                    source.Read(read =>
                                    {
                                        read.Action("getData", "String");
                                    });
                                })
    

    【讨论】:

      【解决方案4】:

      您的getData() 返回什么?您需要返回一个可枚举的对象,该对象具有名为stringname 的属性或您在 DataText/DataValue 文件中指定的任何属性名称。 像这样的东西: return Json(youStringArray.Select(x=&gt;new{stringname = x}))

      【讨论】:

      • 不,它仍然设置未定义的值。我已经更新了问题,请查看。
      【解决方案5】:
      using TestSolution.Utility;
       ...
      
      public JsonResult getData()
      {
         try
         {
           var stringlist = object.getstrlist();
           return Json(stringlist.ToIdNameList(), JsonRequestBehavior.AllowGet);
         }
         catch (Exception ex)
         {
            return Json("", JsonRequestBehavior.AllowGet);
         }
      }
      
      =============================
      
      using TestSolution.Models;
      using System.Collections.Generic;
      using System.Linq;
      
      namespace TestSolution.Utility
      {
          /// <summary>
          /// Kendo Drop Down List Extention
          /// </summary>
          public static class KendoDropDownListExtention
          {
              public static List<IdName> ToIdNameList(this string[] stringList)
              {
                  return stringList.Select(sl => new IdName() { Name = sl, Value = sl }).ToList();
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-11-24
        • 1970-01-01
        • 1970-01-01
        • 2016-01-22
        • 1970-01-01
        • 2016-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多