我使用ADO.Net作为数据源开发了MVC 4单页应用程序。试图通过ID过滤视图,尝试了没有任何运气的会话变量。这是视图代码:
<script type="text/javascript" src="@Url.Content("~/Scripts/BloodPressuresViewModel.js")"></script>
<script type="text/javascript">
$(function () {
upshot.metadata(@(Html.Metadata<KOTest2.Controllers.DALController>()));
var viewModel = new MyApp.BloodPressuresViewModel({
serviceUrl: "@Url.Content("~/api/DAL")"
});
ko.applyBindings(viewModel);
});
</script>
和hee是Javascript文件中的calss代码:
.....
var entityType = "BloodPressure:#KOTest2.Models";
MyApp.BloodPressure = function (data) {
var self = this;
// Underlying data
self.ID = ko.observable(data.ID);
self.PHN = ko.observable(data.PHN);
self.Day = ko.observable(data.Day);
self.Systolic = ko.observable(data.Systolic);
self.Diastolic = ko.observable(data.Diastolic);
self.HeartRate = ko.observable(data.HeartRate);
upshot.addEntityProperties(self, entityType);
}
.....
我认为最好的解决方案是使用ViewBag将ID传递给控制器的视图。知道我怎么能这样做!!
由于我不是经验丰富的程序员,是否可以过滤(foreach)
<tbody data-bind="foreach: bloodPressures">
提前致谢。
答案 0 :(得分:0)
我不确定我是否理解您如何访问数据库(在服务器上,对吧?)进行过滤,但您可以这样做:
<table data-bind="foreach: rows">
<tr>
<td>id: <span data-bind="text: ID"></span></td>
<td>PHN: <span data-bind="text: PHN"></span></td>
....
</tr>
</table>
并在您的javascript中
function viewModel() {
var self = this;
this.loggedIn = ko.observable(false);
this.rows = ko.observableArray([]);
// return an array of objects to display to the user
function getDataFromServer() {
return ...;
}
ko.computed(function() {
if (this.loggedIn())
this.rows(getDataFromServer());
},this);
...
}
但是,您执行身份验证后,执行this.loggedIn(true)
会导致计算函数触发服务器的提取和this.rows()
的设置;这反过来会更新显示。