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

时间:2016-01-19 20:27:22

标签: c# asp.net-mvc kendo-ui kendo-asp.net-mvc kendo-dropdown

我有以下Kendo DropdownList:

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

我想要的是item list item.Selected = true;.Value()是我的下拉列表的默认值。我不能为我的生活弄清楚如何让kendo下拉列表尊重它所绑定的选择列表中项目的Selected状态。我找到的所有kendo文档告诉我使用.SelectedIndex()Selected = true;但我不能这样做(或者不知道我会怎么做)因为列表中的'Selected'项目是从单独的数据库查询动态确定,所以我必须进行单独调用,然后进行比较并通过javascript / jquery设置值。

简而言之,我如何获得Kendo()。DropDownListFor将默认选中的选项设置为我的SelectList中@POST @Path("/uploadDocument") @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadDocument( @FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition contentDispositionHeader) {

的项目

1 个答案:

答案 0 :(得分:0)

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

@(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