2012-04-28 75 views
4

这是我第一次用令人敬畏的Web Api和Backbone进行实验。到目前为止,一切似乎都是在天堂所做的。不过,我似乎无法使用OData过滤器返回相关数据。例如,我有以下内容作为一个操作方法:在C#MVC 4 Web Api和Backbone中使用OData过滤器

//GET /api/posts/ 
    public IQueryable<KiaFamilyPost> Get() 
    { 
     return _db.Posts 
      .Include("Badge") 
      .Include("Entry") 
      .AsQueryable(); 
    } 

现在我想过滤上述职位,以降序返回它们。从我的理解我可以做以下“http:// [MySite]/api/posts?$ filter = id eq 2 & $ orderby = DatePost desc”。我尝试做以下无济于事:

 APP.posts_collection.fetch({data: { 
      entryId: APP.entry.get('Id'), 
      $order: 'Id desc' 
     }}); 

骨干进行以下呼叫控制器“HTTP:// [的MySite]/API /职位ENTRYID = 1 &%24order =号+降序“。任何人都可以得到这个工作正常?

感谢

泰隆

回答

4

我试用了Addy Osmani的一个插件backbone.paginator。如果您正在使用像MVC 4这样的Web Api,我相信这将非常适合。您所做的只是使用Paginator提供的一些参数来扩展您的收藏。例如。

perPageAttribute: '$top', 

    skipAttribute: '$skip', 

    orderAttribute: 'orderBy', 

    customAttribute1: '$inlinecount', 

    queryAttribute: '$filter', 

    formatAttribute: '$format', 

    customAttribute2: '$callback',` 
+0

你在哪里写这个?在paginator_ui部分或server_api部分?你使用客户端寻呼机还是请求寻呼机? – CallumVass 2012-08-29 07:29:32

+0

您在创建分页集合时进行设置。上面的链接有例子。向下滚动到底部。客户分页程序用于在您集合中已有的模型之间进行分页。当您想向服务器发送请求并仅根据您的分页设置接收模型时,使用请求传呼机。上面的链接应该能够更深入地讨论它。 – TYRONEMICHAEL 2012-08-29 07:33:40

0

能否请您检查此代码的工作: (我认为APP.entry为型号,所以要得到它的URL我打电话APP.entry.url)

var entryId = APP.entry.get('Id'); 
    var queryUrl = APP.entry.url() + '?$filter=id eq ' + entryId +'&$orderby=DatePost desc'; 
    APP.posts_collection.fetch({ url : queryUrl }); 

我还没有测试过这样的代码,但我希望它能起作用,或者至少给你一个线索。

+0

感谢您的回复。我认为会有一个更优雅的解决方案,因为你可以在提取方法中设置你的参数。出于某种原因,$的字符最终为%24。奇怪,但是addyosmani为Backbone.js开发了一个paginator插件。他以Neflix为例,他们的API与MVC API类似。我会尝试并回复你。 – TYRONEMICHAEL 2012-05-02 07:57:06