2013-05-06 75 views
0

我有一個WPF應用程序,在那裏我使用ObservableCollection刷新/更改/添加到viewModel與視圖的幫助下的綁定。asp.net中的observablecollection替代mvc

現在即時通訊有額外的要求,以創建使用asp.net的MVC

有沒有替代的ObservableCollection在asp.net mvc的web應用程序?

如果是這樣,給人以jQuery和剃刀引擎(asp.net的MVC)一個很好的例子..

回答

2

沒有沒有。事情是在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在我的祕訣是忘記你知道有關事件的一切。

1

首先閱讀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網頁,因爲有很多樣本和教程。