我遇到了Cascading DropDownListFor的问题。我正在将一个页面从Telerik 2012 MVC Extensions升级到ASP.NET MVC的UI。虽然每个其他页面都是轻而易举的,但带有级联下拉列表的一页却是一场噩梦。
控制器被称为" SalesOrder。"以下是我希望从我的Kendo下拉列表中获得的行为:
以下是下拉列表和javascript。
@(Html.Kendo().DropDownListFor(model => model.SourceSystem)
.BindTo(ViewBag.SourceSystemShortNames)
.DataTextField("SourceSystemDisplayName")
.DataValueField("SourceSystemId")
.Value(Model.SourceSystem)
)
@(Html.Kendo().DropDownListFor(model => model.Consignee)
.CascadeFrom("SourceSystem")
.DataSource(source =>
{
source.Read(read =>
{
read.Action("GetConsignees", "SalesOrder")
.Data("GetSourceSystemVal");
});
})
.Value(Model.Consignee)
.DataTextField("ConsigneeDisplayName")
.DataValueField("ConsigneeId")
.AutoBind(false)
)
<script type="text/javascript">
function GetSourceSystemVal() {
return {
SourceSystem: $("#SourceSystem").val()
};
}
</script>
以下是SalesOrder控制器中的GetConsignees,当SourceSystem发生变化时,它被支持以获取收件人。
public JsonResult GetConsignees(string SourceSystem)
{
var consignees = dbContext.Consignees.AsQueryable();
var returnConsignees = consignees
.Where(r => r.SourceSystemShortName == SourceSystem)
.Select(r => new { ConsigneeId = r.Consignee1, ConsigneeDisplayName = r.Consignee1 });
return Json(returnConsignees, JsonRequestBehavior.AllowGet);
}
SourceSystem下拉列表填充得很好,因为它在页面加载时被设置为ViewBag对象。当页面加载时,我甚至会调用〜/ SalesOrder / GetConsigness /?SourceSystem = TEST。我验证了我在returnConsignees变量中获取记录,并且我总是按预期获得TEST SourceSystem 1。但是,填充的唯一DDL是SourceSystem列表。当我更改SourceSystem列表中的值时,我甚至看不到对GetConsignees方法的新调用。我需要Consignee DDL来改变SourceSystem的变化,所以这是一个问题。
我不明白为什么我在这里级联很麻烦。有什么我想念的吗?我错误地想到了这个吗?请帮助!