我遇到了将选择框的选定值绑定到视图模型中的属性的问题。出于某种原因,它在发回服务器时会保持不变。knockoutjs映射选择数据绑定选项
我的HTML是:
<form action="/Task/Create" data-bind="submit: save">
<table border="1">
<tr>
<td>ref type</td>
<td><select data-bind="options: ReferenceTypes, optionsText: 'Name', optionsCaption: 'Select...', value:Task.ReferenceTypeId"></select></td>
<td>Reference</td>
<td><input data-bind="value:Task.Reference" /></td>
</tr>
</table>
<button type="submit">Save Listings</button>
</form>
的JavaScript是:从提琴手
<script type="text/javascript">
var viewModel = {};
$.getJSON('/Task/CreateJson', function (result) {
viewModel = ko.mapping.fromJS(result.Data);
viewModel.save = function() {
var data = ko.toJSON(this);
$.ajax({
url: '/Task/Create',
contentType: 'application/json',
type: "POST",
data: data,
dataType: 'json',
success: function (result) {
ko.mapping.updateFromJS(viewModel, result);
}
});
}
ko.applyBindings(viewModel);
});
</script>
的JSON得到如下加载到页面。
{
"ContentEncoding":null,
"ContentType":null,
"Data":{
"Task":{
"ReferenceTypeId":0,
"Reference":"Default Value"
},
"ReferenceTypes":[
{
"Id":2,
"Name":"A Ref Type"
},
{
"Id":3,
"Name":"B Ref Type"
},
{
"Id":1,
"Name":"C Ref Type"
}
]
},
"JsonRequestBehavior":1
}
这回来到服务器(ASP.NET MVC3)正确,用更新的参考字符串值,但ReferenceTypeId没有绑定到正确选择下拉值。我是否需要执行任何附加功能来正确绑定等?或者告诉数据绑定什么是选择值列(Id)等?我已经在Fiddler中检查了从浏览器返回的值,并且它具有相同的原始值(0)。所以它肯定不是服务器。
我希望有人可以提供帮助,如果您需要更多信息,请询问。
亲切的问候 菲尔
我认为这将是简单的事情!测试和工作:)我敢肯定,我看了文档上的额外选项,但认为特定的设置是用于多选框。好吧。真的很感激你的时间疯狂:) – Phil 2012-03-17 06:54:21