设置值以选择MVC中的下拉列表的问题

时间:2016-04-05 14:21:53

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

我正在使用MVC。

我有两次下拉和'primaryspec'的一次更改'primarysubspec'应该加载。

一切正常,可以将值传递给控制器​​,并将其保存到数据库。

当我尝试检索保存的详细信息时,“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);

            }

        });
    }

一切正常,但仅在显示DB中保存的值时才面临问题。

显示'primarySpec'的罚款 显示为“PrimarySubSpec”的值为空,而不是下拉列表中保存的值。

请告诉我是什么问题如何在'primarySubSpec'下拉列表中将保存的值显示为选定值。

1 个答案:

答案 0 :(得分:1)

问题: 当您加载页面以查看保存的值时,永远不会调用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();