如何在kendo下拉列表中绑定字符串列表

时间:2016-07-12 10:51:52

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

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

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

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

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

我按类名列表绑定下拉列表,但是只有一个数据在字符串列表中,我不知道如何绑定它!

我在下面这样做了:

 @(
                 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);
            }
        }

有谁知道我该怎么做!

任何帮助都会受到赞赏。

5 个答案:

答案 0 :(得分:3)

不知道它是否好或者通过一些手工工作获得了解决方案:

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");
                                    });
                                })
                )

答案 1 :(得分:1)

你提供的答案实际上是正确的。 Action必须返回List<SelectListItem>作为输出。 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循环。

答案 2 :(得分:1)

尝试ValuePrimitive:

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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();
        }
    }
}