代码之家  ›  专栏  ›  技术社区  ›  sirrocco

筛选列表、排序、编辑行和返回

  •  0
  • sirrocco  · 技术社区  · 14 年前

    情况是这样的:

    您有一个项目列表。列表可以分页、筛选和排序。每行上都有一个编辑按钮。单击“编辑”按钮,转到页面并保存。

    现在-我想回到以前的过滤器/页面。

    我也希望尽可能使它通用,这样就很容易在多个页面上应用。

    我是这么想的:

    我的动作是这样的:

    public ActionResult Index(StudentFilter studentFilter)
    

    创建一个覆盖OnActionExecuting的属性。如果有ActionParameters传入,那么可能会重新过滤列表,所以只需存储新的过滤器(这里我想实际获取StudentFilter对象-因此欢迎关于如何获取该对象的想法)。

    如果没有ActionParameters,那么加载存储的过滤器(可能来自json序列化的cookie)并在模型上设置它。

    这里的问题是我不知道如何填充模型。

    有什么建议吗?

    1 回复  |  直到 14 年前
        1
  •  0
  •   LukLed    14 年前

    你可以考虑某种过滤器的基类:

    public class BaseFilter
    {
        public string Property { get; set; } 
        public FilterType Type { get; set; }
        public Object[] Arguments { get; set; }
        public Expression<T> GenerateExpression()
        {
           ....
        }
    }
    

    写作 GenerateExpression() 功能可以很好的锻炼:)

    你可以储存 List<BaseFilter> 当前用户的会话中。其他功能将具有其他会话密钥。当您要应用筛选器时,您将调用:

    var items = Repository.GetAll();
    var filters = Session["key"] as List<BaseFilter>;//Session wrapper usage recommended here
    foreach(var filter in filters)
    {
        items = items.Where(filter.GenerateExpression());
    }
    

    如果不想存储其他参数,可以创建其他类并将其存储在会话中,而不是 列表<基本筛选器> :

    public class ListState
    {
        public int Page { get; set; }
        public List<BaseFilter> AppliedFilters { get; set; }
        public string Order { get; set; } 
    }