【发布时间】:2015-02-27 14:19:31
【问题描述】:
正如我在以下问题中提到的:How do I pass an ID from View to the ViewModel as a parameter for GET function? 我正在开发一个 MVC 应用程序,使用 MVC4、knockoutJS、Web API、Bootstrap、MSSQL Server 2012 等。我正在使用 DataTables jQuery 库来创建表并使用 knockoutJS 将它们与数据库中的数据绑定。出现以下两个问题:当我使用 data-bind="foreach: regionListModel.regions" 绑定表时,它会填充我的表,但它会在表的末尾添加一行“表中没有数据”,在表格页脚显示“显示 0 到 0 个结果,共 0 个结果”,没有分页,当我尝试过滤结果时,它会完全清空表格。当我使用标题对列进行排序时,也会发生同样的情况。
我将再次发布代码sn-ps。
视图模型:
var regionsModel = {
regionId: ko.observable(),
companyId: ko.observable(),
name: ko.observable(),
companyName: ko.observable()
};
var regionsListModel = {
regions: ko.observable()
};
function getRegions() {
get(apiUrl + "Regions/GetRegions", {}, function (data) {
regionsListModel.regions(data);
});
}
function getRegion() {
get(apiUrl + "Regions/GetRegion", { aiId: regionsModel.regionId() }, function (data) {
regionsModel.regionId(data.RegionID);
regionsModel.companyName(data.CompanyName);
regionsModel.companyId(data.CompanyID);
regionsModel.name(data.Name);
});
}
function viewRegion() {
$("#ViewRegionModal").modal('show');
//regionsModel.regionId($('#ViewRegion').val());
getRegion();
return false;
}
视图代码:
<table class="table table-striped table-bordered responsive" id="dtable">
<thead>
<tr>
<th style="width: 20px;">ID</th>
<th>Region Name</th>
<th>Company Name</th>
</tr>
</thead>
<tbody data-bind="foreach: regionsListModel.regions">
<tr id="ViewRegion" data-toggle="modal" data-bind="click: viewRegion, value: RegionID">
<td data-bind="text: RegionID"></td>
<td data-bind="text: Name"></td>
<td data-bind="text: CompanyName"></td>
</tr>
</tbody>
</table>
问题图片:http://i.imgur.com/CNRnRlW.png
任何帮助将不胜感激!
编辑:添加调用 getRegions 的代码(位于 Regions.js 文件中,ViewModel 放在 RegionsData.js 中,均在页面加载时加载)。
$(function () {
ko.applyBindings(regionsModel);
getRegions();
getCompanies();
$("#NewRegionButton").click(function () {
$("#NewRegionModal").modal('show');
return false;
});
$("#ViewRegion").click(function () {
$("#ViewRegionModal").modal('show');
return false;
});
$("#NewRegionModalClose").click(function () {
clearFields();
$("#NewRegionModal").modal('hide');
return false;
});
$("#NewRegionSave").click(function () {
newRegion();
$("#NewRegionModal").modal('hide');
return false;
});
$("#ViewRegionClose").click(function () {
$("#ViewRegionModal").modal('hide');
return false;
});
$("#ViewRegionEdit").click(function () {
$("#ViewRegionModal").modal('hide');
$("#EditRegionModal").modal('show');
return false;
});
$("#RegionUpdateSave").click(function () {
updateRegion();
$("#EditRegionModal").modal('hide');
return false;
});
$("#ViewRegionEditClose").click(function () {
clearFields();
$("#EditRegionModal").modal('hide');
return false;
});
})
【问题讨论】:
-
你的问题是什么?
-
嗯,我正在寻找解决我提到的两个正在发生的问题的方向。
-
看来
getRegions永远不会被调用。此外,getRegion似乎是唯一在regionsModel中设置任何值的东西,但它加载的 URL 取决于其中一个值。 -
感谢您的关注,我刚刚编辑了帖子,并添加了调用函数的代码。
-
我尝试了几种使用 KO 和 DataTables 的方法,但都没有成功。即使使用 jQuery 来绘制表格或表格的某些部分,它也不起作用。我可能会尝试使用 KoGrid,但如果有人有其他建议,我将不胜感激!
标签: knockout.js jquery-datatables asp.net-mvc-viewmodel