【问题标题】:Asp.Net MVC3 adding search functionalityAsp.Net MVC3 添加搜索功能
【发布时间】:2011-07-13 13:07:56
【问题描述】:

我正在尝试在客户列表上实现搜索功能,该功能在 Asp.Net 网站上的本教程中有详细说明,

http://www.asp.net/entity-framework/tutorials/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

在我的控制器中,我有以下内容

public ViewResult Index(string sortOrder, string searchString)
    {
        ViewBag.CustomerNameSortParm = String.IsNullOrEmpty(sortOrder) ? "CustomerName desc" : "";
        ViewBag.PrimaryContactNameSortParm = sortOrder == "PrimaryContactName" ? "PrimaryContactName desc" : "PrimaryContactName";
        var cust = repository.Customers;

        if (!String.IsNullOrEmpty(searchString))
        {
            cust = cust.Where(c => c.CustomerName.ToUpper().Contains(searchString.ToUpper())
                                   || c.PrimaryContactName.ToUpper().Contains(searchString.ToUpper()));
        }

        switch (sortOrder)
        {
            case "CustomerName desc":
                cust = repository.Customers.OrderByDescending(s => s.CustomerName);
                break;
            case "PrimaryContactName":
                cust = repository.Customers.OrderBy(s => s.PrimaryContactName);
                break;
            case "PrimaryContactName desc":
                cust = repository.Customers.OrderByDescending(s => s.PrimaryContactName);
                break;
            default:
                cust = repository.Customers.OrderBy(s => s.CustomerName);
                break;
        }

        return View(cust.ToList());
    }

if 语句检查值并应使用 LINQ、WHERE 语句过滤列表,

我在视图中设置了文本框

@using (Html.BeginForm())
{
<p>
    Find by name: @Html.TextBox("SearchString") &nbsp;
    <input type="submit" value="Search" /></p>
}

但是,当我输入客户名称时,结果没有被过滤,我使用的是 SQL Server 2008 R2,有其他人遇到过这个问题吗?要让 Contains 方法正常工作,还需要其他什么吗?

感谢您的建议?

利亚姆

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework-4 repository-pattern


    【解决方案1】:

    在排序顺序开关中,您使用 repository.Customers 重新设置 cust 变量。您应该使用 cust 变量来对过滤集应用排序。

    switch (sortOrder)
            {
                case "CustomerName desc":
                    cust = cust.OrderByDescending(s => s.CustomerName);
                    break;
    

    【讨论】:

    • 感谢您的建议,伙计们设法根据您的建议对其进行排序。
    【解决方案2】:

    当你进行搜索时,你有 if 语句,但它仍然会进入 switch 语句,尝试

        if (!String.IsNullOrEmpty(searchString))
        {
            cust = cust.Where(c => c.CustomerName.ToUpper().Contains(searchString.ToUpper())
                                   || c.PrimaryContactName.ToUpper().Contains(searchString.ToUpper()));
        }
        else
        {
            switch (sortOrder)
            {
                case "CustomerName desc":
                    cust = repository.Customers.OrderByDescending(s => s.CustomerName);
                    break;
                case "PrimaryContactName":
                    cust = repository.Customers.OrderBy(s => s.PrimaryContactName);
                    break;
                case "PrimaryContactName desc":
                    cust = repository.Customers.OrderByDescending(s => s.PrimaryContactName);
                    break;
                default:
                    cust = repository.Customers.OrderBy(s => s.CustomerName);
                    break;
            }
        }
    

    这样 cust 在设置后不会被重新分配

    编辑:由于您在方法的开头设置了 cust,因此您也可以拥有

        if (!String.IsNullOrEmpty(searchString))
        {
            cust = cust.Where(c => c.CustomerName.ToUpper().Contains(searchString.ToUpper())
                                   || c.PrimaryContactName.ToUpper().Contains(searchString.ToUpper()));
        }
    
        switch (sortOrder)
        {
            case "CustomerName desc":
                cust = cust.OrderByDescending(s => s.CustomerName);
                break;
            case "PrimaryContactName":
                cust = cust.OrderBy(s => s.PrimaryContactName);
                break;
            case "PrimaryContactName desc":
                cust = cust.OrderByDescending(s => s.PrimaryContactName);
                break;
            default:
                cust = cust.OrderBy(s => s.CustomerName);
                break;
        }
    

    在不重新加载的情况下仍然订购 cust

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-14
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多