我有一個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網頁,因爲有很多樣本和教程。