我会尝试尽可能简洁。
问题是:什么是允许所有排序和过滤器语法成为URL的一部分并在服务器上轻松解释/使用它而无需编写一堆解释它的自定义代码的有效约定? / p>
我一直在做一些研究,我遇到了OData URI约定,我喜欢他们做事的方式。 http://www.odata.org/developers/protocols/uri-conventions
更多研究表明,MVC 4 Web API允许通过返回IQueryable来使用该约定。除了一个部分之外,这看起来很棒...我现在还没有实现RESTful API,而这似乎与它有关。那么我怎样才能使用像OData这样的东西并仍然返回一个View或PartialView?是否有能够将OData URI约定解析为C#对象的东西?
如果有人对此问题或建议有任何见解,我会全力以赴。
答案 0 :(得分:0)
关于你问题的url约定部分,我想你已经用OData回答了你自己的问题。至于将这些数据转换为C#对象,我将使用以下方法:
使用动作过滤器来插入url参数并将它们解析为c#对象。 在您的操作过滤器中,将url参数添加到路径数据中,c#对象将在您的操作中可用。
ASP.NET MVC Pass object from Custom Action Filter to Action
看一下Telerik MVC网格,他们使用GridAction动作过滤器来完成你所要求的几乎所有。
答案 1 :(得分:0)
我会看一下自定义模型绑定。可以在此处找到一个很好的概述:http://weblogs.asp.net/nmarun/archive/2010/02/25/asp-net-mvc-model-binding.aspx
它通常用于带表单的POST请求,但没有理由不能将它用于GET请求。
基本上,您的方法应该是:
使用过滤器/排序参数作为属性创建一个新的Model类:
public class TableParameters {
public string TableFilter { get; set; }
}
在Controller的操作中,将模型添加为参数
public ActionResult TableAction(TableParameters parameters) { /* Action logic */ }
通过说明
在URL中设置参数 /Controller/TableAction?TableFilter=[your-filter-string]
操作中的参数对象将使用查询字符串中的值填充属性。