Javascript 将初始下拉列表值设置为viewmodel

Javascript 将初始下拉列表值设置为viewmodel,javascript,html,knockout.js,Javascript,Html,Knockout.js,我在下拉列表中遇到一些问题,我需要将初始值传递给viewmodel。只是想澄清一下:我正在处理一个编辑表单,所以dropdownlist将填充一个已经选择的值 到目前为止,我得到的是: 剃刀: //删除razor代码 foreach(长度preValue中的var preValue) { if(lengthPreValue.Contains(preValue.value)) { @前值 } 其他的 { @前值 } } 我的viewmodel如下所示: var editOfferV

我在下拉列表中遇到一些问题,我需要将初始值传递给viewmodel。只是想澄清一下:我正在处理一个编辑表单,所以dropdownlist将填充一个已经选择的值

到目前为止,我得到的是:

剃刀:


//删除razor代码
foreach(长度preValue中的var preValue)
{ 
if(lengthPreValue.Contains(preValue.value))
{ 
@前值
} 
其他的
{ 
@前值
} 
} 
我的viewmodel如下所示:

var editOfferViewModel = { 
  // Properties omitted 
  selectedLength: ko.observable("") 
}; 

ko.applyBindings(editOfferViewModel); 
虽然这在选择新值时确实有效,但在设置初始值时我有点卡住了。我很幸运地在stackoverflow.com上从Ryan Niemeyer那里得到了一些帮助,包括复选框和创建自定义BindingHandler,但我仍然很幸运 老实说,很难弄明白


因此,在此方面的任何帮助和/或提示都将不胜感激

一种常见且简单的方法是将模型值序列化到页面。这将类似于:

var viewModel = {
  choices: ko.observableArray(@Html.Raw(Json.Encode(Options))),
  selectedChoices: ko.observableArray(@Html.Raw(Json.Encode(SelectedOptions)))
};
然后,只需在select上使用标准数据绑定,如:

data-bind="options: choices, selectedOptions: selectedChoices"
然后,您甚至不需要在Razor中填充选项元素


如果您的
viewModel
是在外部文件中构建的,那么您只需在视图中设置可观测值(加载外部脚本后)

我的数据类似于:

dataList = [ {name:'length1',id:1},{name:'length2',id:2},{name:'length3',id:3},{name:'length4',id:4},{name:'length5',id:5} ]
我一直在使用下拉列表中的数据,如下所示:

<select name="xxx" id="xxxid" data-bind="options: dataList,  value: selectedLength , optionsText: 'name', optionsValue: 'id', optionsCaption: 'Please Select...'"></select>


<select name="xxx2" id="xxxid2" data-bind="options: dataList,  selectedOptions: multiSelectedLength , optionsText: 'name', optionsValue: 'id', optionsCaption: 'Please Select...'" size="5" multiple="true"></select>   

var editOfferViewModel = {
 selectedLength: ko.observable(),
 multiSelectedLength: ko.observableArray()    
};

ko.applyBindings(editOfferViewModel);

$(document).ready(function() {
    // Set initial value
    editOfferViewModel.selectedLength(2);
    // Set inital multi value
    editOfferViewModel.multiSelectedLength(['2','3']);   
});

var editOfferViewModel={
selectedLength:ko.observable(),
多选长度:ko.observearray()
};
ko.应用绑定(editOfferViewModel);
$(文档).ready(函数(){
//设定初始值
editOfferViewModel.selectedLength(2);
//设置初始多值
editOfferViewModel.multiSelectedLength(['2','3']);
});
可以使用“值”属性设置初始值

这是工作表