过滤列表,订单,编辑行和返回

时间:2010-05-03 16:51:10

标签: asp.net-mvc

情况如下:

您有一个项目列表。该列表可以被分页,过滤和排序。在每一行,一个编辑按钮。单击编辑按钮,转到页面并保存。

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

我还希望尽可能使其更通用,以便在多个页面上应用。

这就是我的想法:

我的行动如下:

public ActionResult Index(StudentFilter studentFilter)

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

如果没有ActionParameters,则加载存储的过滤器(可能来自json序列化cookie)并将其设置在Model上。

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

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你可以想到过滤器的某种基类:

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());
}

如果您不想存储其他参数,可以创建其他类并将其存储在Session而不是List<BaseFilter>中:

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