1

我试图找到在我需要例如过滤的情况下视图控制器通信的最佳实践。

我收集了页面上的项目和过滤器控件。我正在按字母、状态等过滤项目......这是一个简单的场景,我将过滤器选择的值发送给控制器,控制器将结果返回给页面。

如果您考虑一下,这是一个方向循环。查看带有参数(过滤器值)的调用控制器,控制器调用数据库,然后获取元素并将该元素返回给视图。有没有办法将这些元素和控制器发送到控制器只是为了过滤它们并将过滤后的集合返回给视图?或者也许可以缩短到服务器的行程,给控制器只是元素的 id,控制器知道要从数据库中提取哪些元素,然后过滤它们,将过滤后的集合返回......

不好的做法?一些工作?

你怎么看?

谢谢

4

1 回答 1

0

我是如何做到这一点的,就像您在上一段中提到的那样:

将这些元素和控制器发送到控制器只是为了过滤它们并将过滤后的集合返回给视图

您可以使用 linq 来执行此操作。所以让我们说一下你发送给它的一个列表。因此,当您执行过滤器时 - 比如说按类别 - 您期望按类别过滤列表(比如说 Category = “Book”)。

因此,在您的控制器中,您的 List() 操作(或您所称的任何操作)应该准备好接受过滤器参数。然后基于该参数使用 LINQ 缩小要传递给视图的集合。像这样:

public ActionResult List(bool fromCache, string filter)
{
    // if filtering - always pull from cache to increase performance
    ProductList productList;
    if (fromCache)
        productList = Session[SessionKeys.ProductList] as ProductList;
    else
    {
        productList = ProductInfoList.GetProductInfoList();
        Session[SessionKeys.ProductInfoList] = productList;
    }

    // apply filter
    var data = productList.Where(p => p.Category == filter);
    return View(ViewLocations.ProductListing, data);
}

代码可能在语法上不正确,但你去 - 祝你好运。

于 2009-04-10T15:54:25.890 回答