我对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
是枚举。
答案 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都遇到了问题。
Html.Kendo.DropDownList()
构建下拉列表(我刚刚在解决方案工作后验证了这一点。)对我来说,主要的困难是调试器中没有报告任何内容,因此诊断问题是一种痛苦。最后,我使用了Firefox Web开发人员工具的“网络”选项卡来确保确实发送了Ajax请求。检查该请求表明它导致对控制器的模糊呼叫。
另外,要清除C Sharper回答的评论:
parseInt()
来电。