在 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 中选择下拉菜单的设置值问题的主要内容,如果未能解决你的问题,请参考以下文章