在我从API提取国家和州数据的情况下,更新kendo组合框的数据源后,似乎无法保留与模型的链接。
让我们说有一种国际通用的形式。因此,我们要提供一个“国家/地区”组合框和一个“国家/地区”组合框,然后按所选国家/地区过滤州/省。如果用户选择一个国家,则状态组合框将更新。这很棒!但是,当我提交时,模型中的stateid字段为null。
我尝试手动更改数据源,但实际上找不到关于此类问题的更多信息。如果有人能指出我正确的方向,那将不胜感激。
数据模型:
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为空。
我发现,如果我一开始就下载了所有国家的所有州,那么它将按预期工作。
答案 0 :(得分:0)
我发现了另一个解决方法/黑客,其工作原理比下载所有加载状态更好。我将控件从组合框更改为下拉列表,瞧,现在可以使用了。
不知道为什么这不起作用,但是由于我的问题已解决,因此我将其关闭,而且无论如何,组合框对于这种问题确实是致命的。
如果您遇到此问题,希望找到解决方案,请查看cascading dropdownlist 由CarstenFranke提供
应该为您更好地工作。