2013-07-24 61 views
3

我有以下三个KendoUI下拉列表框无法读取KendoUI下拉列表值

@(Html.Kendo().DropDownList() 
    .HtmlAttributes(new { style = "width:120px;height:20px;font-size:12px;" }) 
    .OptionLabel("Make (any)") 
    .Name("Make") 
    .DataTextField("Name") 
    .DataValueField("Id") 
    .DataSource(source => 
    { 
      source.Read(read => 
      { 
       read.Action("UpdateFilters", "Home"); 
      }) 
      .ServerFiltering(true); 
    }) 
    .Events(e => e.Change("UpdateFilterParameters")) 
    .SelectedIndex(0) //Select first item. 
    ) 

    @(Html.Kendo().DropDownList()  
      .Name("Model") 
      .HtmlAttributes(new { style = "width:120px;height:20px;font-size:12px;'" }) 
      .OptionLabel("Model (any)") 
      .DataTextField("Name") 
      .DataValueField("Id") 
      .DataSource(source => { 
       source.Read(read => 
       { 
        read.Action("UpdateFilters", "Home"); 
       }) 
       .ServerFiltering(true); 
      }) 
      .Enable(true) 
      .AutoBind(true) 
      .Events(e => e.Change("UpdateFilterParameters")) 


    ) 

    @(Html.Kendo().DropDownList() 
      .Name("Fuel") 
      .HtmlAttributes(new { style = "width:120px;height:20px;font-size:12px;" }) 
      .OptionLabel("Fuel type (any)") 
      .DataTextField("Name") 
      .DataValueField("Id") 
      .DataSource(source => 
      { 
       source.Read(read => 
       { 
        read.Action("UpdateFilters", "Home"); 
       }) 
       .ServerFiltering(true); 
      }) 
      .Enable(true) 
      .AutoBind(true) 
      .Events(e => e.Change("UpdateFilterParameters")) 


    ) 

这是我的MVC控制器

public JsonResult UpdateFilters(string FilterInfo) 
    { 
     FilterParameter oFilterInfo = new FilterParameter(); 

     // Json object for filtering 
     // {'Procedure':'GetMakes','Id':[1,2,3]} 
     try 
     { 
      oFilterInfo = JsonConvert.DeserializeObject<FilterParameter>(FilterInfo); 
      return Json(UpdateFilterParameter.GetUpdatedFilters(oFilterInfo), JsonRequestBehavior.AllowGet); 
     } 
     catch 
     { 
      return new JsonResult(); 
     } 

    } 

这是我班举行的JSON数据

public class FilterParameter 
{ 
    public string Procedure { get; set; } 
    public int?[] Id; 

    public FilterParameter() 
    { 
    } 
} 

我遇到的问题是在调用JavaScript函数UpdateFilterParameters时,我只是getti ng列表框的值,但不是全部。这是功能;

function UpdateFilterParameters() { 

     var iMake = $("#Make").val(); 
     var iModel = $("#Model").val(); 
     var iFuel = $("#Fuel").val(); 

     $('#Make').data("kendoDropDownList").dataSource.read(
      { FilterInfo: "{'Procedure':'GetMakes','Id':[" + iMake + "," + iModel + "," + iFuel + "]}" }); 

     $('#Model').data("kendoDropDownList").dataSource.read(
      { FilterInfo: "{'Procedure':'GetModels','Id':[" + iMake + "," + iModel + "," + iFuel + "]}" }); 

     $('#Fuel').data("kendoDropDownList").dataSource.read(
      { FilterInfo: "{'Procedure':'GetFuelTypes','Id':[" + iMake + "," + iModel + "," + iFuel + "]}" }); 

    }; 

任何想法为什么会发生这种情况?

+0

是否需要更多信息来帮助解决我的问题? – Tommassiov

回答

3

要解决这个问题,我不得不将函数UpdateFilterParameters更改为如下所示,以显示Id值或传递NULL。当解序列化Json时,我的代码出现故障

function UpdateFilterParameters() { 

     var iMake = $("#Make").val(); 
     var iModel = $("#Model").val(); 
     var iFuel = $("#Fuel").val(); 

     var ids = (iMake || "null") + "," + (iModel || "null") + "," + (iFuel || "null"); 

     $('#Make').data("kendoDropDownList").dataSource.read(
      { FilterInfo: "{'Procedure':'GetMakes','Id':[" + ids + "]}" }); 

     $('#Model').data("kendoDropDownList").dataSource.read(
      { FilterInfo: "{'Procedure':'GetModels','Id':[" + ids + "]}" }); 

     $('#Fuel').data("kendoDropDownList").dataSource.read(
      { FilterInfo: "{'Procedure':'GetFuelTypes','Id':[" + ids + "]}" }); 

    }; 
+0

嘿我试图实现你有什么,因为我doens't工作@'http:// stackoverflow.com /问题/ 18410895 /如何阅读 - kendoui - 级联 - 下拉列表从控制器',但在你的例如我无法获得'JsonConvert.'或'UpdateFilterParameter.'它们都是'Err:'不存在于当前contedxt中。你能帮我吗? –

+0

您是否添加了对使用Newsoft.Json的引用? – Tommassiov

+0

当然有,你能想到的其他东西?你也认为我有一个很好的理由,为什么我不能从我的formCollection值和控制器级别的DDl的Name/id做'string filter3 = values [“DDLID”]? –