面临来自Model的下拉列表设置值的问题

时间:2016-04-06 09:04:31

标签: javascript jquery asp.net-mvc-4 knockout.js knockout-mvc

我正在使用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下拉列表。

1 个答案:

答案 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/