面临从模型中设置下拉列表值的问题

Posted

技术标签:

【中文标题】面临从模型中设置下拉列表值的问题【英文标题】:Facing issue with setting value for dropdown list from Model 【发布时间】:2016-07-26 13:47:29 【问题描述】:

我正在将 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】:

当使用异步方法填充下拉列表或选择列表时,您必须小心避免在列表填充之前绑定所选值。

如果您更改列表,Knockout 将仅保留列表中存在的绑定值。如果没有,该值将被设置为undefined

要更正您的代码,请将值保存在变量中,并仅在列表填充后设置可观察的

var holdingValue = $('#ddUserDetailsPrimarySubSpeciality').val();
this.PrimarySubspecialty = Ko.observable();

然后在列表填满后设置值:

model.primarySubSpecialities(data);
model.PrimarySubspecialty(holdingValue);

我已经做了一个快速的 JSFiddle 测试页面来证明这一点:https://jsfiddle.net/Quango/0bxaqLf8/

【讨论】:

以上是关于面临从模型中设置下拉列表值的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jquery 和 php 从动态数据中设置默认下拉列表?

如何从下拉列表中设置默认值[重复]

从下拉列表中选择数据时,从 MYSQL 数据库中设置输入字段值属性

使用Angularjs在选择下拉菜单中设置默认值

Angular 2 - 在下拉列表中设置选定值

在 DataGridViewComboBox 下拉列表中设置特定项目的颜色