将 Kendo dropdownlistfor 的默认值设置为 'Selected = true' SelectListItem

Posted

技术标签:

【中文标题】将 Kendo dropdownlistfor 的默认值设置为 \'Selected = true\' SelectListItem【英文标题】:Set default value of Kendo dropdownlistfor to 'Selected = true' SelectListItem将 Kendo dropdownlistfor 的默认值设置为 'Selected = true' SelectListItem 【发布时间】: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 =
                        $"cmtscmts.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 的值与其中一个选项的值匹配,则将选择该选项。绑定属性时忽略设置SelectListItemSelected属性(可以删除第二个foreach循环) 【参考方案1】:

如果你绑定到一个原始值(看起来你是),你需要添加一个属性(注意下划线,而不是破折号):

@(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")
                            .HtmlAttributes(new  data_value_primitive = "true" )
                            .ToClientTemplate())

http://docs.telerik.com/kendo-ui/framework/mvvm/bindings/value#use-the-value-binding-with-a-select-widget-to-update-the-view-model-field-with-the-value-field-when-the-initial-value-is-null

【讨论】:

嗯,这对我不起作用。也许我错过了一些东西。我用 webAPI 代码的更多上下文更新了我的问题。我只是返回一个 SelectList 作为IHttpActionResult 的一部分

以上是关于将 Kendo dropdownlistfor 的默认值设置为 'Selected = true' SelectListItem的主要内容,如果未能解决你的问题,请参考以下文章

kendo 网格控件中的 DropDownList(通过 ClientTemplate)

如何使用 jquery 禁用 kendo ui 下拉列表?

Kendo DropDownList 问题在 MVC 上调用操作

Kendo DropdownList MVC在读取成功时绑定JS函数

将递增 ID 连接到 @DropDownListFor id 值

DropdownListFor - 页面模型上的空引用异常