2016-07-12 2 views
1

Здравствуйте, я использую Kendo для ASP.NET MVC.Как связать список строк в выпадающем списке kendo

У меня есть список строк, содержащих данные

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

Теперь я хочу, чтобы связать этот список строки в кендо DropDownList.

У меня есть список выпадающего списка по списку классов с именем и идентификатором, но только с одним данным в списке строк, я не знаю, как связать это!

Я сделал это, как показано ниже:

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

Кто-нибудь есть идеи, как я могу это сделать!

Любая помощь была бы оценена.

+0

что возвращаемый тип вашего 'getData' действий? –

+0

По * списку строки * вы имеете в виду массив javascript или список C#? – DontVoteMeDown

+0

Тип возвращаемого значения - json, а возвращаемые данные - из списка строк из C#, и я обновил вопрос, увидев его, чтобы вы могли лучше понять. –

ответ

1

Ответ на этот вопрос вы предоставили на самом деле прав. Действие должно вернуть 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.

+1

Ох, да, не нужно использовать для цикла. Спасибо, это уменьшило мой код. –

0

Что возвращает getData()? Вам нужно вернуть перечислимый объект, у которого есть свойство stringname или какое имя свойства вы указываете в файлах DataText/DataValue. Что-то вроде этого: return Json(youStringArray.Select(x=>new{stringname = x}))

+0

Нет, он все еще устанавливает неопределенное значение. Я обновил вопрос, пожалуйста, посмотрите на него. –

2

Не знаю, хорошо это или нет, но есть решение с некоторой ручной работы:

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

Попробуйте ValuePrimitive:

    Html.Kendo().DropDownList() 
         .Name("ddlstrings") 
         .ValuePrimitive(true) 
         .SelectedIndex(0) 
         .DataSource(source => 
          { 
           source.Read(read => 
           { 
            read.Action("getData", "String"); 
           }); 
          }) 
Смежные вопросы