2016-01-19 34 views
0

我有以下剑道DROPDOWNLIST:设置默认值“所选=真” SelectListItem

@(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.Selected = true;是我的下拉列表的默认值item。我不能在我的生活中找出如何让kendo下拉菜单尊重它绑定到的选择列表中项目的Selected状态。我找到的所有kendo文档告诉我要么使用.Value()要么使用.SelectedIndex(),但我不能这样做(或者不知道我会怎么做),因为列表中的“Selected”项是从单独的数据库查询中动态确定的,所以我将不得不做一个单独的调用,然后做一个比较,并通过javascript/jquery设置值。

所以,简而言之,我怎么剑道()。DropDownListFor设置默认选择的选项,在我的SelectList项目与Selected = true;

+1

我不熟悉的剑道控制,但如果他们的工作方式类似于标准控件,选定的属性SelectListItem是典型的在大多数情况下y被忽略,并且实际值来自模型属性(在这种情况下是Model.CmtsId)。 –

+0

如果'CmtsId'的值与其中一个选项的值匹配,那么该选项将被选中。设置'SelectListItem'的'Selected'属性在绑定到一个属性时会被忽略(你可以删除第二个'foreach'循环) –

回答

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

+0

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