在 MVC 中选择下拉菜单的设置值问题

Posted

技术标签:

【中文标题】在 MVC 中选择下拉菜单的设置值问题【英文标题】:Issue with setting value to select dropdown in MVC 【发布时间】:2016-07-25 13:21:39 【问题描述】:

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

            

        );
    

一切正常,但仅在显示数据库中保存的值时遇到问题。

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

请告诉我有什么问题,我如何将保存的值显示为“primarySubSpec”下拉列表中的选定值。

【问题讨论】:

恕我直言,如果您将下拉列表绑定到可观察数组以获取它们的选项,则可以改进整体实现。如果你这样做,加载/初始化已经保存的值将(几乎)自动为你发生 我也试过这个方法。我也会把代码放上去。仍然没有反映'primarySubSpecilaity'的值 【参考方案1】:

问题: 当您加载页面以查看保存的值时,永远不会调用更改事件。

原因: 当您的页面加载了保存的值时,选择框会在淘汰赛知道任何有关它的信息之前选择保存的值。母鸡没有调用更改事件。

最简单的解决方案: 如下更改primarySpecilaityChanged

this.primarySpecilaityChanged = function () 
  var val = $("#ddUserDetailsPrimarySpeciality").val();
  if(val)
    primarySubStartIndex = 0;
    primarySubSpecialityUrl = '/' + NMCApp.getVirtualDirectoryName() + '/PlatformUser/GetSpecialitiesandSubSpecilaities?primarySpeciality=' + val+//model.primarySpecialityUID() +'&secondarySpeciality=';
    loadPrimarySubSpecilaities();
  
;

然后在调用ko.applyBindings 之后调用primarySpecilaityChanged 函数。

var viewModel = new YourViewModel();
ko.applyBindings(viewModel);
viewModel.primarySpecilaityChanged();

【讨论】:

对不起,我没有遇到更改事件的问题。我使用相同的代码进行添加和查看。添加模型是成功的。查看保存的值时,仅面临问题'PrimarySubspeciality' 下拉菜单 我知道,但是您通过 ajax 加载“PrimarySubSpeciality”的值,并且在调用 change 事件时进行 ajax 调用。我想说的是,当您第一次使用保存的值加载页面时,不会调用 change 事件。

以上是关于在 MVC 中选择下拉菜单的设置值问题的主要内容,如果未能解决你的问题,请参考以下文章

选择下拉菜单的选项时,“无法设置属性‘值’为空”

MVC3:通过Javascript获取下拉菜单选择的值/文本

使用 Jquery 的下拉菜单的默认选择值

关于MVC视图下拉菜单绑定与取值的问题

如何根据另一个下拉菜单值禁用下拉菜单

ASP.NET MVC 级联下拉菜单