我在MVC 4 Web应用程序中使用knockout。当控制器方法返回数据时,Knockout不会呈现任何数据。控制台也没有错误。 视图中的属性名称也与模型类中的属性名称匹配。
[HttpGet]
public JsonResult GetUsers()
{
using (UsersContext context = new UsersContext())
{
return Json(context.UserProfiles.ToList(),JsonRequestBehavior.AllowGet);
}
}
<script type="text/javascript">
function users() {
var vm = this;
vm.registeredUsers = ko.observableArray();
$.ajax({
url: '@Url.Action("GetUsers", "Account")',
cache: false,
type: 'GET',
contentType: 'application/json; charset=utf-8',
data: {},
success: function (data) {
vm.registeredUsers(data);
}
});
}
var usersViewModel = new users();
ko.applyBindings(usersViewModel);
</script>
<tbody data-bind="foreach: registeredUsers">
<tr>
<td data-bind="text: UserId"></td>
<td data-bind="text: UserName"></td>
</tr>
</tbody>
模型类:
[Table("UserProfile")]
public class UserProfile
{
public UserProfile();
[Key]
public int UserId { get; set; }
public string UserName { get; set; }
}
答案 0 :(得分:1)
我相信你应该改变这两件事:
1)脚本应该在domready上运行(即把它放在
中)$(function(){
//your script here
});
3)最后,
ko.applyBindings(usersViewModel);
应该具有应用绑定的DOM元素的第二个参数,即:
ko.applyBindings(usersViewModel, $('table-selector')[0]);
编辑:看起来这是可选的,如果没有指定dom元素,ko将绑定到整个[document]。