В случае, когда я получаю данные о стране и государстве из 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 будет сохранено в модели.
Actual
Фактически это визуально изменяет комбинированный список состояний.Вы можете увидеть все состояния и фильтр.Однако, когда вы отправляете и отлаживаете, вы можете видеть, что StateId в модели равен нулю.
Текущий обходной путь / хак
Я обнаружил, что если я загружаю все состояния (для всех стран)в начале, то работает как задумано.