我正在使用MVC和KnockoutJs,并遇到value
绑定问题。
@Html.DropDownListFor(m => m.PrimarySubspecialty, Model.PrimarySubspecialties, new { id = "ddUserDetailsPrimarySubSpeciality", style = "width:245px;height:25px;", @class = "nmc-select", data_bind = "options: primarySubSpecialities,optionsText: 'Name',optionsValue: 'Id',value:PrimarySubspecialty" })
我不确定为什么模型中的PrimarySubspecialty
值没有绑定到下拉列表选定值。
这是我的js代码:
this.PrimarySubspecialty = Ko.observable($('#ddUserDetailsPrimarySubSpeciality').val());
this.primarySubSpecialities = ko.observableArray([]);
function loadPrimarySubSpecilaities() {
$.ajax({
type: 'GET',
url: primarySubSpecialityUrl,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
processdata: false,
cache: false,
success: function (data) {
primarySubSpecialities = [];
try {
if (data.length == 0) {
primarySubSpeacilityDropdownId.empty();
}
model.primarySubSpecialities(data);
}
});
}
请告诉我如何将值设置为PrimarySubSpeciality
下拉列表。
答案 0 :(得分:0)
使用异步方法填充下拉列表或选择列表时,必须小心避免在列表填充之前绑定选定的值。
如果更改列表,Knockout将仅保留列表中存在的绑定值。如果没有,则该值将设置为 undefined 。
要更正代码,请将值保存在变量中,并在列表填充后仅设置observable :
var holdingValue = $('#ddUserDetailsPrimarySubSpeciality').val();
this.PrimarySubspecialty = Ko.observable();
然后在填充列表后设置值:
model.primarySubSpecialities(data);
model.PrimarySubspecialty(holdingValue);
我已经完成了一个快速的JSFiddle测试页面来演示:https://jsfiddle.net/Quango/0bxaqLf8/