为什么CascadeFrom()没有做任何事情?

时间:2014-06-19 15:30:48

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

我对Kendo UI真的很陌生,我在CascadeFrom()没有在我的控制器上调用操作时遇到问题。这是我问题的根本原因:

// The parent dropdown
<select id="Testing">
    <option value="0">Vehicle</option>
    <option value="1">Driver</option>
    <option value="2">Trailer</option>
</select>

// The dynamic dropdown                                      
@(Html.Kendo().DropDownListFor(m => m.VDTId)
    .DataValueField("Id")
    .DataTextField("Item")
    .DataSource(ds =>
    {
        ds.Read(c => c.Action("GetVDT", "CompanyVDTUnavailability")
            .Data("getVDTSelection"))
            .ServerFiltering(true);
    })
    .CascadeFrom("Testing"))

// Function to allow Kendo to pass a value to 
// the type parameter of my GetVDT action.
function getVDTSelection() {
    return {
        type: parseInt($("#Testing").val())
    };
}

首次加载页面时会调用该操作,并返回正确的数据。问题是,如果我从Testing下拉列表中进行选择,则永远不会在控制器上调用该操作(我已使用操作上的断点对此进行了验证),这意味着动态下拉列表永远不会更新

通过官方示例以及围绕SO的其他问题,我无法看到我做错了什么。有人能指出我正确的方向吗?

修改:我已经通过将父下拉列表更改为以下内容来尝试Petur的解决方案:

@(Html.Kendo().DropDownListFor(m => m.Type)
    .Name("Testing")
    .DataValueField("Id")
    .DataTextField("Text")
    .BindTo(Model.UnavailabilityTypes))

这会正确绑定父下拉列表,但即使首次加载页面,也不再调用级联下拉列表的控制器操作。有什么建议吗?

请求的控制器操作签名:

public JsonResult GetVDT(CompanyUnavailabilityType type)

其中CompanyUnavailabilityType是枚举。

3 个答案:

答案 0 :(得分:1)

Kendo DropDownList只能从另一个Kendo DropDownList / ComboBox级联。将第一个小部件转换为kendo DropDownList,它应该开始正常工作。

答案 1 :(得分:1)

我认为问题是getVDTSelection()返回的是int或string值而不是Enum值。如果没有,请将方法sig更改为int,尝试使用字符串和我的注释中描述的方法

public JsonResult GetVDT(int type)
{
   //AllowGet might be needed as well
   return Json(jsonObjx,JsonRequestBehavior.AllowGet);
}

编辑: 您也可以尝试手动强制ddl级联。抛弃CascadeFrom并手动完成。

function OnChangeOfParentDDL(e){

    var parentValue =  $("#ParentDDL").val();

    $("#ChildDDL").val("").data("kendoDropDownList").text("");//clear it out

    var child = $("#ChildDDL").data("kendoDropDownList");
    child.dataSource.read({ type : parentValue });    
}

答案 2 :(得分:0)

Petur和C Sharper都遇到了问题。

  1. 我确实需要使用Html.Kendo.DropDownList()构建下拉列表(我刚刚在解决方案工作后验证了这一点。)
  2. 控制器上的方法签名是个问题,但只是因为我在那里留下了旧的测试方法,导致调用模糊。
  3. 对我来说,主要的困难是调试器中没有报告任何内容,因此诊断问题是一种痛苦。最后,我使用了Firefox Web开发人员工具的“网络”选项卡来确保确实发送了Ajax请求。检查该请求表明它导致对控制器的模糊呼叫。

    另外,要清除C Sharper回答的评论:

    1. 不需要parseInt()来电。
    2. 调用将正确映射到服务器端的枚举,这意味着我在问题中发布的方法签名是正确的。