2010-05-03 105 views
0

这种情况:过滤器列表,订单,编辑行,并返回

你有一个项目列表。该列表可以分页,过滤和订购。在每一行上都有一个编辑按钮。点击编辑按钮,转到一个页面并保存。

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

我也想尽可能通用,所以很容易应用在多个页面上。

这是我的想法是:

我的行动看起来是这样的:

public ActionResult Index(StudentFilter studentFilter) 

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

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

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

有什么建议吗?

+0

对于本我通常只是加载某种类型的jQuery网格,并在客户端执行所有的排序(有时候也是过滤)。 – 2010-05-03 17:05:10

+0

我看过jQuery网格,发现它们有点麻烦,我可以更深入地研究它们。 – sirrocco 2010-05-03 17:14:55

回答

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

如果你wan't存储其他参数,您可以创建其他类,并将其存储在会话,而不是List<BaseFilter>

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