2016-02-12 14 views
2

我有这个模型(含intIEnumerable S)设置一堆KendoUI DropDownLists的默认值,我想在这个IEnumerable创造KendoUI DropDownList每个元素:如何结合的IEnumerable时使用ASP.NET MVC

public class PlayersInGameViewModel 
{ 
    public PlayersInGameViewModel() 
    { 
     this.FirstTeamPlayers = Enumerable.Range(1, 8).Select(x => 0).ToList(); 
    } 

    public IList<int> FirstTeamPlayers { get; set; } 
} 

在我的控制器我有一个动作,以提供下拉列表中的数据(这并不重要,但我分享它完整起见):

public ActionResult PlayersRead() 
{ 
    var result = 
     this.players.All() 
      .Select(x => new { Name = x.FirstName + " " + x.LastName, Value = x.Id }) 
      .OrderBy(x => x.Name) 
      .ToList(); 
    result.Insert(0, new { Name = "-----------", Value = 0 }); 
    return this.Json(result, JsonRequestBehavior.AllowGet); 
} 

这在我看来,部分地方我创建了DropDownList S:

@for (var i = 0; i < 8; i++) 
{ 
    @(Html.Kendo().DropDownListFor(x => x.FirstTeamPlayers[i]) 
     .DataTextField("Name") 
     .DataValueField("Value") 
     .Filter("contains") 
     .MinLength(1) 
     .DataSource(source => 
     { 
      source.Read(read => 
      { 
       read.Action("PlayersRead", "PlayersInGames"); 
      }) 
      .ServerFiltering(false); 
     }) 
    ) 
    <br /> 
} 

的问题是,当我在FirstTeamPlayers设置的元素之一,我希望他们能够加载下拉窗口小部件时填充:

[HttpGet] 
public ActionResult Edit(int id) 
{ 
    var viewModel = this.Mapper.Map<PlayersInGameViewModel>(this.games.GetById(id)); 
    viewModel.FirstTeamPlayers[2] = 3; 
    return this.View(viewModel); 
} 

下面是结果为HTML:

<input data-val="true" data-val-number="The field Int32 must be a number." data-val-required="The Int32 field is required." id="FirstTeamPlayers_2_" name="FirstTeamPlayers[2]" type="text" value="3" /> 
<script> 
    jQuery(function(){jQuery("#FirstTeamPlayers_2_").kendoDropDownList({"dataSource":{"transport":{"read":{"url":"/Administration/PlayersInGames/PlayersRead"},"prefix":""},"schema":{"errors":"Errors"}},"dataTextField":"Name","filter":"contains","minLength":1,"valuePrimitive":true,"dataValueField":"Value"});}); 
</script> 

正如你所看到的一切似乎是正确生成和value="3"预在HTML格式发送,但在浏览器中的小部件显示了所有的下拉列表中的默认值:

8 KendoUI DropDowns

有控制台上没有JavaScript错误。

我错过了什么? 为什么KendoUI不尊重给定的价值?

编辑:

而且所有的值都正确装入:

enter image description here

回答

0

目前我使用一种变通方法:通过在Kendo().DropDownListFor()帮手.SelectedIndex(Model.FirstTeamPlayers[i])方法设置值。

这是我的工作的看法:

@for (var i = 0; i < 8; i++) 
{ 
    @(Html.Kendo().DropDownListFor(x => x.FirstTeamPlayers[i]) 
     .DataTextField("Name") 
     .DataValueField("Value") 
     .Filter("contains") 
     .SelectedIndex(Model.FirstTeamPlayers[i]) 
     .MinLength(1) 
     .DataSource(source => 
     { 
      source.Read(read => 
      { 
       read.Action("PlayersRead", "PlayersInGames"); 
      }) 
      .ServerFiltering(false); 
     }) 
    ) 
}