【发布时间】:2019-05-16 21:08:50
【问题描述】:
如果我从 API 获取 Country 和 State 数据,在更新 kendo 组合框的数据源后,我似乎无法保持与模型的链接。
假设有一种表格将在国际上使用。所以我们想提供一个 Country Combobox 和一个 State Combobox,然后按所选国家/地区过滤状态。如果用户选择一个国家,那么状态组合框就会更新。这很棒!但是,当我去提交的时候,模型中的stateid字段为空。
我已尝试手动更改数据源,但无法找到有关此类问题的更多信息。如果有人能指出我正确的方向,那将不胜感激。
数据模型:
class ExampleModel {
[display(name='StateId')]
int? stateId;
[display(name='CountryId')]
int? countryId
}
剃须刀:
<div id='country-wrapper'>
@(Html.Kendo().ComboBoxFor(m => m.CountryId)
.Filter("contains")
.Placeholder("-- Select Country --")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new SelectList(stateList, "CountryId", "CountryName", 1))
.Suggest(true)
.HtmlAttributes(new { @id = "CountryId", onchange = " CountryChangeEvent(this); ComboChangeEvent(this);"
}));
</div>
<div id='state-wrapper'>
@(Html.Kendo().ComboBoxFor(m => m.StateId)
.Filter("contains")
.Placeholder("-- Select State --")
.DataTextField("Text")
.DataValueField("Value")
.BindTo(new SelectList(stateList, "StateId", "StateName"))
.Suggest(true)
.HtmlAttributes(new { @id = "StateId", onchange = "ComboChangeEvent(this)"
}));
</div>
js:
function CountryChangeEvent(elem) {
var chosenId = $("#CountryId").data('kendoComboBox').value();
if (!chosenId) return;
$("#ProfileStateId").kendoComboBox({
dataTextField: "Text",
dataValueField: "Value",
dataSource: {
transport: {
read: {
// call this method in the controller and reset datasource
cache: false,
serverFiltering: true,
async: false,
dataType: "json",
url: '@Url.Action("GetStatesByCountryJson", "Home")?countryId=' + chosenId,
}
}
},
filter: "contains",
suggest: true
});
var combobox = $("#StateId").data('kendoComboBox');
combobox.select(function (dataItem) {
// clear the statecombobox
return dataItem.Value === '';
});
}
预期
我希望在调用 CountryChangeEvent 函数时状态列表会发生变化。此外,当您提交表单时,StateId 值将存储在模型中。
实际
实际上它确实在视觉上改变了状态组合框。你可以看到所有的状态和过滤器。但是提交调试的时候可以看到模型中的StateId为null。
当前的解决方法/破解
我发现,如果我一开始就下载所有州(适用于所有国家),那么它会按预期工作。
【问题讨论】:
-
Kendo 提供了他们所谓的级联下拉菜单。看看demos.telerik.com/aspnet-mvc/dropdownlist/cascadingdropdownlist
-
@CarstenFranke 谢谢。下次我会用那个。如果您好奇,我会发布我所做的答案。
标签: asp.net-mvc razor kendo-ui