2
我有这个模型(含int
的IEnumerable
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格式发送,但在浏览器中的小部件显示了所有的下拉列表中的默认值:
有控制台上没有JavaScript错误。
我错过了什么? 为什么KendoUI不尊重给定的价值?
编辑:
而且所有的值都正确装入: