我正在使用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控制器?
答案 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的效果非常好,我一直在寻找推动这个例子的新方法。