2012-02-21 50 views
1

我正在使用mvc和backbone.js處理小型網站應用程序,並且對於如何處理異步請求與常規請求有幾點想法。使用ASP.NET MVC和Backbone.js以及漸進式增強功能的豐富網頁應用程序

今天我使用了一個名爲/ pages的控制器,如果它是ajax請求,則返回一個局部視圖,如果是常規請求,則返回一個標準視圖。在another question中,有人告訴我,當我將一堆HTML發送回客戶端時,我做得不對。

那麼應該如何構建我的控制器等來處理異步和非異步請求?

在我的情況,我有以下的代碼在我的網頁控制器

public ActionResult Index() { 
    var id = _model.Id; 
    var parentId = _model.Parent != null ? _model.Parent.Id : null; 
    var viewModel = new IndexViewModel 
    { 
     RootModel = _session.Query<IPageModel>().SingleOrDefault(model => model.Parent == null), 
     CurrentModel = _model, 
     ParentModel = parentId != null ? _session.Load<IPageModel>(parentId) : null, 
     Children = _session.Query<IPageModel>() 
      .Where(model => model.Parent.Id == id) 
      .Where(model => !model.Metadata.IsDeleted) 
      .OrderBy(model => model.Metadata.SortOrder) 
      .ToList() 
    }; 

    if(Request.IsAjaxRequest()) { 
     return PartialView(viewModel);  
    } 
    return View(viewModel); 
} 

但是,如果我理解正確的事情,我會過得更好發回的網頁的集合,而不是一個完整的視圖模式?我應該如何在我的控制器中處理這個?

使用eg創建一個單獨的控制器/ API是一個好主意。 mvc 4中的api控制器?

回答

4

如果您使用Backbone,那麼您應該返回JSON insted PartialView,並且PartialView應該是Backbone視圖將呈現該頁面的頁面中的模板。

+0

好吧,在我的情況下,我應該只是返回一個IPageModels的集合,還是可以發回完整的視圖模型?我猜想發回收藏是要走的路? – Marcus 2012-02-21 11:27:13

+0

它取決於你的視圖模板是否是來自viewmodel的這些數據是的yes否則我將與集合 – 2012-02-21 16:54:54

0

我同意Florim。你應該從你的MVC控制器返回json。 Backbone是以REST爲基礎構建的。因此,你的服務器應該模仿一個REST API,並且返回json以供Backbone使用。當我使用MVC 3和Backbone時,我所有的服務器代碼都會返回數據。它通常有一個視圖,那就是Backbone Application View。 Web應用程序「視圖」使用從我的控制器返回的數據中的模板呈現。希望這可以幫助。

我還沒有玩過MVC 4 Web API,但我確實認爲這種情況會是它的理想選擇。

+0

好吧,你對backbone.js和MVC的漸進增強有什麼看法?這是一篇關於該主題的博客文章http://lostechies.com/derickbailey/2011/09/26/seo-and-accessibility-with-html5-pushstate-part-2-progressive-enhancement-with-backbone-js/ – Marcus 2012-02-22 06:38:13

+0

是否有可能使用剃刀視圖作爲模板,或者我最好使用例如jQuery模板或下劃線? – Marcus 2012-02-22 12:30:50

+0

我使用下劃線的模板並將從服務器返回的json傳遞到模板中。他們如何在演示todo.js上做什麼如果您不想在服務器上構建自己的REST API,則可以考慮使用https://github.com/ServiceStack/ServiceStack.Examples/ - 由主人在此處構建。我以前沒有用過它,但絕對考慮在未來的應用中使用它。我提供的鏈接中有一個主要示例。它使用Redis進行數據訪問,但我確信你可以使用實體或任何你想要的東西。 – TYRONEMICHAEL 2012-02-22 14:04:55

0

我已經將幾個Backbone示例一起編譯成使用REST接口的正在運行的ASP.net MVC 3應用程序。這裏是我的tumblr Blog的鏈接,我已經向源代碼和我用作資源的網站提供了信息。 Backbone.js在MVC 3中運行得非常好,我一直在尋找推動這個例子的新方法。

相關問題