.net MVC, С#, KnockoutJS
Итак, у меня есть 2 выпадающих списка. Оба, данные которых заполняются через вызов Ajax от функции Knockout к функции контроллера MVC. Первоначальная настройка работает нормально, когда при выборе первого раскрывающегося списка заполняется второе раскрывающееся меню. Что мне нужно сделать, так это передать текст и значение, выбранное из второго раскрывающегося списка в событии нажатия кнопки, на следующий контроллер. Я пробовал как подписаться, так и onchange, но не могу получить значение и текст, выбранный из второго раскрывающегося списка. Вот код ниже:
Выпадающий список 1
<select data-bind="options: countries ,
optionsText: 'Name',
optionsValue: 'ID',
value: selectedCountry,
optionsCaption: '--Please Select--'" asp-placeholder-for="Country" asp-for="Country" class="form-control common-input-text"></select>
Выпадающий список 2
<select data-bind="options: states ,
optionsText: 'Name',
visible: ifSelected,
optionsValue: 'ID',
event: { change: selectionChanged },
value: selectedState"
asp-placeholder-for="State" asp-for="State"
class="form-control common-input-text"></select>
Нокаут
(function () {
var viewModel = function (vmData) {
var self = this;
self.countries = ko.observableArray();
self.selectedCountry = ko.observable();
self.states = ko.observableArray();
self.ifSelected = ko.observable(false);
self.selectedState = ko.observable();
//Populate Country DDL
$.ajax({
url: rootDir + "/Home/GetCountry",
type: "GET",
contentType: "application/json",
async: false,
success: function (data) {
self.countries(JSON.parse(data));
}
});
//Populate state DDL based on country
self.selectedCountry.subscribe(function (val) {
$.ajax({
url: rootDir + "/Home/GetStates",
type: "GET",
data: { stateVal: val },
contentType: "application/json",
async: false,
success: function (data) {
var jsonData = JSON.parse(data);
self.ifSelected(true);
self.states(jsonData);
}
});
});
//I have tried to subscribe to second dropdown but this function is never hit
self.selectedState.subscribe(function (value) {
});
//I have tried to bind onchange event to state dropdown but the selected value is always null
self.selectionChanged = function(event) {
var a = self.selectedState(); //null or udefined
}
};
var pageVM = new viewModel();
ko.applyBindings(pageVM, $("form")[0]);
})();