Backbone.js REST URL与ASP.NET MVC 3

And*_*ers 13 rest backbone.js asp.net-mvc-3

我最近一直在研究Backbone.js,现在我正试图用我的服务器端asp.net mvc 3来连接它.

这是我发现问题的时候.ASP.NET侦听不同的Actions,Ex:POST /Users/Create而不仅仅是POST /users/.因此,Model.Save()backbone.js中的方法将不起作用.

我们该如何解决这个问题?我必须改写Backbone.Sync吗?

Bil*_*uer 15

答案是不要覆盖Backbone.sync.你很少想要这样做.相反,您只需要利用模型的url属性,您可以在其中分配一个返回所需URL的函数.例如,

Forum = Backbone.Model.extend({

  url: function() {
    return this.isNew() ? '/Users/Create' : '/Users/' + this.get('id');
  }

});
Run Code Online (Sandbox Code Playgroud)

用于模型的URL根据模型是否是新的而变化.如果我正确地阅读了你的问题,这就是你需要做的.


Ray*_*nos 12

您必须告诉ASP.NET MVC路由正确的REST URL或修复Backbone.sync,以便它在正确的URL发送GET/POST请求.

Backbone使用REST而不是RESTful URL.可能有一个Backbone.sync的操作系统实现与您的网址匹配.

推荐使用Backbone更好玩的网址:

GET     /forums              ->  index
GET     /forums/new          ->  new
POST    /forums              ->  create
GET     /forums/:forum       ->  show
GET     /forums/:forum/edit  ->  edit
PUT     /forums/:forum       ->  update
DELETE  /forums/:forum       ->  destroy
Run Code Online (Sandbox Code Playgroud)


小智 9

我最近写了一篇博客文章,描述了如何将.NET MVC绑定到默认的Backbone服务层.

像之前的海报所提到的那样,你可以采取多种方法.我更喜欢这种方法,因为它需要很少的配置.

控制器:

public class ZocController : Controller
{
    public ActionResult Docs()
    {
        return Json(GetDocs(), JsonRequestBehavior.AllowGet);
    }

    [ActionName("Docs")]
    [HttpPost]
    public ActionResult HandlePostDoc(Doctor doc)
    {
        doc.id = Guid.NewGuid();

        CreateDoc(doc);

        return Json(doc);
    }

    [ActionName("Docs")]
    [HttpPut]
    public ActionResult HandlePutDoc(Doctor doc)
    {
        UpdateDoc(doc);

        return new EmptyResult();
    }

    [ActionName("Docs")]
    [HttpDelete]
    public ActionResult HandleDeleteDoc(Guid id)
    {
        DeleteDoc(id);

        return new EmptyResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

骨干

window.Doctor = Backbone.Model;

window.Doctors = Backbone.Collection.extend({

    model: Doctor,

    url: '/zoc/docs'

});
Run Code Online (Sandbox Code Playgroud)