我正在使用MVC。
我有两个下拉菜单和一个“ primaryspec”更改,应该加载“ primarysubspec”。
一切正常,可以将值传递给控制器,并将其保存到DB。
当我尝试检索保存的详细信息时,不会显示“ primarysubspec”的保存值。
但是显示“ primarySpec”的保存数据。
这是我的.cshtml代码:
@Html.DropDownListFor(m => m.PSpec, Model.PSpec, new { id = "ddUserSpec", style = "width:245px;height:25px;", data_bind = "event: {change: primaryChanged}" }, Model.IsReadOnly)
@Html.DropDownListFor(m => m.PSubspec, Model.PSubspec, new { id = "ddUserSubSpec", style = "width:245px;height:25px;", data_bind = "options: primarySubSpec,optionsText: 'Name',optionsValue: 'Id'" }, Model.IsReadOnly)
这是我的JS代码,用于检索以下值:
this.primarySubSpec = ko.observableArray([]);
this.primarySpecChanged = function () {
var val = $("#ddetailsPrimarySpec").val();
primarySubStartIndex = 0;
primarySubSpecialityUrl = '/PlatformUser/GetSpecandSubSpec?primarySpe=' + val+//model.primarySpecID() +'&secondarySpec=';
loadPrimarySubSpec();
};
function loadPrimarySubSpec() {
$.ajax({
type: 'GET',
url: primarySubSpecUrl,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
processdata: false,
cache: false,
success: function (data) {
primarySubSpec = [];
model.primarySubspec('0');
try {
if (data.length == 0) {
primarySubSpeacId.empty();
}
model.primarySubSpec(data);
},
error: function (request, status, error) {
primarySubSpeacId.prop("disabled", true);
}
});
}
一切工作正常,但仅在显示数据库中保存的值时面临问题。
对“ primarySpec”表现很好
“ PrimarySubSpec”的值显示为空,而不是下拉列表中的已保存值。
请让我知道问题出在哪里,如何在“ primarySubSpec”下拉列表中将保存的值显示为选定值。
最佳答案
问题:
当您加载页面以查看保存的值时,永远不会调用change事件。
为什么:
当您的页面加载有保存的值时,选择框会在淘汰赛不了解任何内容之前选择保存的值。母鸡没有发生变更事件。
最简单的解决方案:
如下更改primarySpecilaityChanged
this.primarySpecilaityChanged = function () {
var val = $("#ddUserDetailsPrimarySpeciality").val();
if(val){
primarySubStartIndex = 0;
primarySubSpecialityUrl = '/' + NMCApp.getVirtualDirectoryName() + '/PlatformUser/GetSpecialitiesandSubSpecilaities?primarySpeciality=' + val+//model.primarySpecialityUID() +'&secondarySpeciality=';
loadPrimarySubSpecilaities();
}
};
然后在调用
primarySpecilaityChanged
之后调用ko.applyBindings
函数。var viewModel = new YourViewModel();
ko.applyBindings(viewModel);
viewModel.primarySpecilaityChanged();