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

Posted

技术标签:

【中文标题】如何在剑道下拉列表中绑定字符串列表【英文标题】: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# 的字符串列表,我更新了问题,请查看,以便您更好地理解。 【参考方案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;newstringname = 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();
        
    

【讨论】:

以上是关于如何在剑道下拉列表中绑定字符串列表的主要内容,如果未能解决你的问题,请参考以下文章

剑道值超越带有 optionLabel 的下拉列表

如何在 MVC 剑道树列表编辑器中实现剑道自动完成下拉菜单

我如何防止剑道下拉列表在角度 4+ 中更改 valueChange 或 selectionChange 事件的值

剑道下拉列表占位符

如何使我的剑道下拉列表只读?

根据下拉更改绑定/重新绑定 Kendo Grid