Kendo:网格中的ComboBox - 将所选组合框的附加数据发送到组合框Read()

时间:2014-10-14 16:52:43

标签: asp.net kendo-ui asp.net-mvc-5 kendo-asp.net-mvc

ASP.NET MVC5

我在网格(InLine Edit)中有组合框

columns.Bound(x=>x.AccountID).EditorTemplateName("MyTemplate")

MyTemplate位于/共享

的位置

有数百万个帐户。

当我尝试编辑网格中的组合框并选择新值时,会显示帐户的ID,而不是名称。这是因为帐户的名称当然没有立即出现所以在 ComboBox.Datasource 的Read()。Data()中我需要发送附加数据; AccountID。

我的ComboBox模板如下所示:

.DataSource(source=>
   source.Read(read =>
      read.Action("ReadAccounts".....)
         .Data("HERE IS WHERE I NEED TO SEND THE ACCOUNT ID AS EXTRA DATA 
             WHEN THIS CBO TEMPLATE IS IN A GRID")

谢谢

1 个答案:

答案 0 :(得分:3)

这是在~/Views/Shared/EditorTemplates/ComboBoxTemplate

的局部视图中定义的组合框
@(Html.Kendo().ComboBox()
          .Name("AcctName")//must match Field Name that is being edited
          .HtmlAttributes(new { style = "width:250px" })
          .DataTextField("AcctName")
          .DataValueField("AcctCd")
          .Filter(FilterType.StartsWith)
          .AutoBind(true)
          .MinLength(3)
          .DataSource(source =>
          {
              source.Read(read =>
              {
                  read.Action("GetCombo", "GridPost").Data("OnAdditionalData");
              })
              .ServerFiltering(true);
          })          
)

这是视图和控制器操作

columns.Bound(x => x.AcctName).Title("Acct Name").EditorTemplateName("ComboBoxTemplate");

 function OnAdditionalData() {          

            var entityGrid = $("#ProposalGridX").data("kendoGrid");
            var selected = entityGrid.dataItem(entityGrid.select());
            //if the id is off the Grid Row and not the ComboBox
            //select the row and pull the fields
            //selected.PropertyName

            return {
                text : $("#AcctName").data("kendoComboBox").text(),
                 val : $("#AcctName").data("kendoComboBox").value()
            };
        }

   public JsonResult GetCombo(string text, string val)
   {
         List<PortfolioViewModel> model = new AUMBusiness().GetAum(DateTime.Now);

           if (!string.IsNullOrEmpty(text))
            {
               model = model.Where(x => x.AcctName.StartsWith(text)).ToList();
            }

         return Json(model, JsonRequestBehavior.AllowGet);
    }

与任何Ajax调用一样,在代码中放置断点可能会阻止窗口小部件按预期执行。对于前者单击要编辑的字段时使用单元格编辑,如果在GetCombo中放置断点,ComboBox编辑器模板将无法正确默认为该值。