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

视图与控制器通信

  •  1
  • Marko  · 技术社区  · 17 年前

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

    如果你仔细想想,这是一个方向的循环。使用参数(筛选器值)查看调用控制器,控制器调用数据库,然后获取元素并将这些元素返回给视图。是否有任何方法将这些元素和控制器发送给控制器,以便对它们进行过滤,并将过滤后的集合返回给视图?或者缩短到服务器的行程,只给控制器元素的id,让控制器知道从数据库中提取哪些元素,然后过滤它们,返回过滤后的集合。。。

    有人在附近工作吗?

    你怎么认为?

    谢谢

    1 回复  |  直到 17 年前
        1
  •  0
  •   Johannes Setiabudi    17 年前

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

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

    您可以使用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);
    }
    

    代码可能在语法上不正确,但你可以这样做-祝你好运。