我有一个WPF应用程序,在那里我使用ObservableCollection刷新/更改/添加到viewModel与视图的帮助下的绑定。asp.net中的observablecollection替代mvc
现在即时通讯有额外的要求,以创建使用asp.net的MVC
有没有替代的ObservableCollection在asp.net mvc的web应用程序?
如果是这样,给人以jQuery和剃刀引擎(asp.net的MVC)一个很好的例子..
我有一个WPF应用程序,在那里我使用ObservableCollection刷新/更改/添加到viewModel与视图的帮助下的绑定。asp.net中的observablecollection替代mvc
现在即时通讯有额外的要求,以创建使用asp.net的MVC
有没有替代的ObservableCollection在asp.net mvc的web应用程序?
如果是这样,给人以jQuery和剃刀引擎(asp.net的MVC)一个很好的例子..
没有没有。事情是在Web开发中,事件不是用在这个意义上的。可能最接近可观察集合的是从服务器请求JSON并使用ajax请求列表并呈现数据客户端。通过一些巧妙的泛型,反射和一些JavaScript代码,你可以将这些代码变成更加动态的。
简单的例子:
控制器:
public JsonResult GetPersons()
{
var list = new List<string> { "Jake", "Jenny", "Joe" };
return Json(list, JsonRequestBehavior.AllowGet);
}
HTML:
<ul id='personlist'></ul>
Jquery的:
$.getJSON('@Url.Action("GetPersons", "MyController")',null,
function (data) {
// iterate each person from the requested data
$.each(data, function (i, p) {
// render each person as li
$("#personlist").append('<li>'+p+'</li>');
});
});
另一个,不那么动态的解决办法是只请求视图,usin g Viewmodel及其中的人员列表。
public class PersonsViewModel
{
public List<string> Persons { get; set; }
public PersonsViewModel(List<string> persons)
{
Persons = persons;
}
}
public ActionResult Persons()
{
var list = new List<string> { "Jake", "Jenny", "Joe" };
return View(new PersonsViewModel(list));
}
查看:
<ul>
@foreach (var item in Model.Persons)
{
<li>@item.ToString()</li>
}
</ul>
如果你是asp.net MVC一个新手,在做WPF /的WinForms在我的秘诀是忘记你知道有关事件的一切。
首先阅读sormii答案:Web应用程序的生命周期并不适合这种事件。您无法更新服务器上的某些内容(控制器或Razor代码),并且希望在客户端(HTML)刷新而无需往返。
由于sormii建议使用Ajax调用是继续进行的方式。如果您喜欢MVVM模式和ObservableCollection的工作方式,请参阅knockoutjs。通过knockoutjs,你可以声明一个包含视图中显示的所有数据的JavaScript视图模型(不要与服务器端的asp.net mvc视图模型混淆)。这个视图模型可以更新(使用javascript代码和ajax调用),knockoutjs将更新DOM刷新值。
这是一个关于如何JavaScript的视图模型将宣布一个小例子:
var ViewModel = function() {
this.items = ko.observableArray();
this.items.push({name: 'foo', lastName: 'bar'});
};
var vm = new ViewModel();
ko.applyBindings(vm);
淘汰赛的ViewModels只是一些声明ko.observableArray或ko.observable(ko.observableArray地图的ObservableCollection其属性的JavaScript对象和ko.observable映射引发PropertyChanged事件的属性)。 然后,你需要告诉淘汰赛如何将这个视图模型绑定到一个DOM元素(如使用WPF和DataTemplate中绑定元素):
<li data-bind="foreach: items">
<ul data-bind="text: name" />
</li>
当KO。applyBindings被调用,Knockout将在我们的viewmodel的items属性中创建一个<li>
元素foreach项。当项目被推入或从项目属性中删除时,淘汰赛将自动更新列表。
看看knockoutjs网页,因为有很多样本和教程。