.net MVC、C#、KnockoutJS
所以我有两个下拉列表。它们的数据都是通过Ajax调用从敲除到MVC控制器函数填充的。初始设置工作正常,在选择第一个下拉列表时,第二个下拉列表将填充。我需要做的是将从按钮单击事件的第二个下拉列表中选择的文本和值传递给下一个控制器。我尝试了subscribe和onchange,但无法获得从第二个dropdpown中选择的值和文本。下面是代码:
下拉列表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]);
})();