使用ASP.NET MVC和Backbone.js以及渐进增强的丰富Web应用程序

时间:2012-02-21 09:27:59

标签: asp.net-mvc asp.net-mvc-3 web-applications backbone.js

我正在使用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);
}

但如果我理解正确的话,我会更好地发回一组页面而不是完整的视图模型?我应该如何在我的控制器中处理这个?

使用例如创建单独的控制器/ api是个好主意。 mvc 4中的api控制器?

4 个答案:

答案 0 :(得分:4)

如果您使用的是Backbone,那么您应该返回JSON而不是PartialView,而PartialView应该是Backbone视图将呈现该模板的页面中的模板。

答案 1 :(得分:1)

如前所述,在不同的答案中,您应该返回JSON结果而不是HTML视图。JSON Result on MSDN Example of using JSON result

如果您使用ASP.NET MVC 4(截至目前测试版),可以使用web api通过ajax / rest调用获取JSON中的数据。

答案 2 :(得分:0)

我同意Florim的看法。你应该从你的MVC控制器返回json。 Backbone是在构建REST时考虑的。因此,您的服务器应该模仿REST API,并返回使用Backbone的json。当我使用MVC 3和Backbone时,我所有的服务器代码都会返回数据。它通常有一个视图,那就是Backbone Application View。 Web应用程序“视图”使用从我的控制器返回的数据中的模板呈现。希望这可以帮助。

我还没有玩过MVC 4 Web API,但我确实认为这种情况是理想的选择。

答案 3 :(得分:0)

我已经将一些Backbone示例编译成一个正在使用REST接口的ASP.net MVC 3应用程序。这是我tumblr Blog的链接,我在其中提供了源代码和我用作资源的网站的信息。 Backbone.js与MVC 3的效果非常好,我一直在寻找推动这个例子的新方法。