无法读取KendoUI下拉列表值

时间:2013-07-24 21:51:45

标签: kendo-ui

我有以下三个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时,我只获取任一列表框的值,但不是全部。这是功能;

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 + "]}" });

    };

为什么会发生这种情况?

1 个答案:

答案 0 :(得分: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 + "]}" });

    };