过滤ASP.MVC应用程序中的列表视图

时间:2010-07-12 10:34:39

标签: asp.net asp.net-mvc

我想基于DropDownList中的值在List视图中实现过滤,在一种'postback'调用中,用户选择下拉值并单击Refresh按钮。我已经发现我应该将我的ViewData用于列出的模型,但是如何将所选值传递回采用过滤器参数的Index覆盖?

3 个答案:

答案 0 :(得分:0)

使用Routing API。您可以在Global.asmx.cs中配置新路由,这意味着对具有特定URL格式的控制器上的“索引”操作的调用将发送到正确的控制器。

只要提交的参数名称与您的操作方法中的参数名称匹配,可能就可以正常工作,但我不太确定。

答案 1 :(得分:0)

ProfK - 你可以通过几种方式做到这一点,我注意到你提到了一种'回发'的方法。在这种情况下,您最好这样做 - 回发过滤器值并在控制器索引方法中“解析”它们。这可能是一种方法:

    public ActionResult Index()
    {
        string sComboValPerson = Request.Form["personfilter"];
        // now do something with this value if it is't null
        if (!string.IsNullOrEmpty(sComboValPerson ))
        {
            var items = _repository.Search(Model, sComboValPerson );
            return View(items);
        }
        else
        // return some kind of not found content or the 'normal' view
        return View();
    }          

答案 2 :(得分:0)

为什么不将您的下拉列表放在具有GET的表单中。然后,您将生成一个类似于http://mysite.com/controller/action/?filterView=ByName的网址。这样,您的最终用户就可以将过滤结果添加为书签,以便快速参考。如果你不想要的话,你也可以创建一条新路线?在网址中。

你的控制器将类似于下面的内容(由你来定义你的过滤逻辑,因为我不知道你是在做日期范围,摆脱重复,等等)。这假设您要按列过滤。

public ActionResult Index(string filterView = "")
    {
        var items = _repository.getItems();
        // filter you items based on the filterView string
        if (!string.IsNullOrEmpty(filterView ))
        {
            //do your filtering logic here
            items = items.where(c=>c.FilterColumn = filterView);
        }
        //return the view with the items that result from the above operation or 
        //just the full list if no filtering was done
        return View(items);
    }