C# 使用Knockoutjs绑定对象列表
我正在尝试使用和将数据绑定到ASP.NET Webforms应用程序 HTMLC# 使用Knockoutjs绑定对象列表,c#,asp.net,knockout.js,webforms,knockout-mapping-plugin,C#,Asp.net,Knockout.js,Webforms,Knockout Mapping Plugin,我正在尝试使用和将数据绑定到ASP.NET Webforms应用程序 HTML <script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> <script src="Scripts/knockout-2.3.0.js" type="text/javascript"></script> <script src="Scripts/knockout.mappi
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="Scripts/knockout-2.3.0.js" type="text/javascript"></script>
<script src="Scripts/knockout.mapping-latest.js" type="text/javascript"></script>
<script type="text/javascript">
function bindModel(data) {
var viewModel;
viewModel = ko.mapping.fromJS(data);
console.log(viewModel);
ko.applyBindings(viewModel);
}
$(document).ready(function () {
$.ajax({
url: "TestPage.aspx/GetItems",
data: {},
type: "POST",
contentType: "application/json",
dataType: "JSON",
timeout: 10000,
success: function (result) {
bindModel(result);
},
error: function (xhr, status) {
alert(status + " - " + xhr.responseText);
}
});
});
</script>
...
<table>
<thead>
<tr>
<th>
Id
</th>
<th>
Name
</th>
</tr>
</thead>
<tbody data-bind="foreach: Item">
<tr>
<td data-bind="text: Id">
</td>
<td data-bind="text: Name">
</td>
</tr>
</tbody>
</table>
但这是一个错误
Uncaught ReferenceError: Unable to parse bindings.
Bindings value: foreach: Item
Message: Item is not defined
我做错了什么,怎么解决
编辑: 如果我直接用数据调用
bindModel
,比如
bindModel({ "d": [{ "__type": "KnockoutWebFormsTest.Item", "Id": 21, "Name": "Item1", "Description": "Item 1 Description" }, { "__type": "KnockoutWebFormsTest.Item", "Id": 2, "Name": "Item2", "Description": "Item 2 Description"}] });
并将data bind=“foreach:Item”
更改为data bind=“foreach:d”
(由david.s建议)
它很好用。。。但如果我将JSON结果直接传递给bindModel,它会给出错误
d is not defined
知道如何解决此问题吗?只是猜测,但您没有传递要绑定的数组。 您正在传递json对象<代码>{d:[{foo:bar},{foo:bar},]} 您可以更改此行
bindModel(结果)代码>
对bindModel(结果d)
以访问“d”包含的数组
我已经创建了一个JSBin。。
ajax调用已被删除,但您明白了重点。只是猜测,但您没有传递要绑定的数组。
您正在传递json对象<代码>{d:[{foo:bar},{foo:bar},]}
您可以更改此行bindModel(结果)代码>
对bindModel(结果d)
以访问“d”包含的数组
我已经创建了一个JSBin。。
ajax调用已被删除,但您明白了重点。从您的JSON响应{“d”:[…]}
我可以看到该数组被称为d
。因此,您的绑定应该是foreach:d
从您的JSON响应{“d”:[…]}
我可以看到该数组被称为d
。所以你的绑定应该是foreach:d
谢谢你的回答和帮助
终于成功了
通过将data bind=“foreach:Item”
更改为data bind=“foreach:d”
(如david.s所建议)
和viewModel=ko.mapping.fromJS(数据)
toviewModel=ko.mapping.fromJSON(数据)代码>感谢所有的答案和帮助
终于成功了
通过将data bind=“foreach:Item”
更改为data bind=“foreach:d”
(如david.s所建议)
和viewModel=ko.mapping.fromJS(数据)
toviewModel=ko.mapping.fromJSON(数据)代码>很抱歉,我将其从注释移动到了建议答案。很抱歉,我将其从注释移动到了建议答案。您所说的“您没有传递要绑定的数组”是什么意思?您所说的“您没有传递要绑定的数组”是什么意思如果你从某人的帖子中得到答案,那么他们应该得到被接受的答案。如果你从某人的帖子中得到答案,那么他们应该得到被接受的答案。
bindModel({ "d": [{ "__type": "KnockoutWebFormsTest.Item", "Id": 21, "Name": "Item1", "Description": "Item 1 Description" }, { "__type": "KnockoutWebFormsTest.Item", "Id": 2, "Name": "Item2", "Description": "Item 2 Description"}] });
d is not defined