我正在使用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();

09-27 18:57