【发布时间】:2016-04-25 11:45:01
【问题描述】:
我有以下剑道下拉列表:
@(Html.Kendo().DropDownListFor(m => Model.CmtsId).Name("#=uid#CmtsId")
.Animation(false)
.DataSource(a => a.Read(r => r.Url("/webAPIpath")))
.DataTextField("Text")
.DataValueField("Value")
.OptionLabel("Select")
.ToClientTemplate())
以下代码位于“webAPIpath”的另一端,并为上述下拉菜单构建一个 SelectList 以用作选项列表:
var results = await _cmtsService.GetAllCmts(LogData);
if (results.Status == ResponseStatus.Success)
{
var markets = await _locationService.GetMarketsForHeadEndAsync(headEnd, LogData);
var prevSelected = await _pendingChangesService.GetPendingPortSelections(nodeId, LogData);
var list = new List<SelectListItem>();
foreach (var cmts in results.Data.Where(a => markets.Data.Any(b => b.Id == a.MarketId)))
{
var market = markets.Data.FirstOrDefault(a => a.Id == cmts.MarketId);
var mfg = _deviceService.GetManufacturerAsync(cmts.ManufacturerId, LogData);
var model = _deviceService.GetModelAsync(cmts.ModelId, LogData);
await Task.WhenAll(mfg, model);
list.Add(new SelectListItem()
{
Text =
$"cmts{cmts.Number}-{market.MarketAbbreviation} / {mfg.Result.Data.Manufacturer} / {model.Result.Data.Model} / {cmts.DocsisCapability}",
Value = cmts.Id.ToString()
});
}
//Set selected value if previous selection exists
foreach (var item in list.Where(item => item.Value.Equals(prevSelected.Data?.NewCMTSID.ToString())))
{
item.Selected = true;
}
return Ok(list);
}
return InternalServerError(results.Exception);
我想要的是list 中的item,其中item.Selected = true; 是我的下拉列表的默认值。我一生都无法弄清楚如何让剑道下拉菜单尊重它绑定到的选择列表中项目的选定状态。我发现的所有剑道文档都告诉我要么使用.Value() 或.SelectedIndex(),但我不能这样做(或者不知道我会怎么做),因为列表中的“选定”项目是从单独的数据库查询,所以我必须进行单独的调用,然后通过 javascript/jquery 进行比较并设置值。
简而言之,我如何让 Kendo().DropDownListFor 将默认选定选项设置为我的 SelectList 中的项目Selected = true;
【问题讨论】:
-
我对剑道控件不熟悉,但是如果它们像标准控件一样工作,大多数情况下通常会忽略 SelectListItem 的 Selected 属性,而实际值来自模型属性(在本例中为 Model.CmtsId)。
-
如果
CmtsId的值与其中一个选项的值匹配,则将选择该选项。绑定属性时忽略设置SelectListItem的Selected属性(可以删除第二个foreach循环)
标签: c# asp.net-mvc kendo-ui kendo-asp.net-mvc kendo-dropdown