创建一个搜索栏c#MVC

时间:2016-06-15 20:39:33

标签: javascript c# asp.net asp.net-mvc entity-framework

我正在尝试在我的MVC应用程序中创建一个搜索栏。我有以下型号

    public class Project
{
    public int projectID { get; set; }
    public int customerID { get; set; }
    public int departmentID { get; set; }
    public string projectName { get; set; }
    public int employeeID { get; set; }
}

我想在索引视图中创建一个搜索栏,允许用户通过输入projectID或projectName来搜索项目列表。到目前为止,我已经在projectName上进行了搜索,但我不确定如何(或者是否可能)同时按ID或两者进行搜索。 这是我的索引视图中的搜索栏:

   @using (Html.BeginForm())
{
<p>
    Name  : @Html.TextBox("SearchName")<br />
    <input type="submit" value="Search" />
</p>
}

这是我的控制器方法

    public ActionResult Index(string searchName)
    {

        var projects = from pr in db.projects select pr;

        if (!String.IsNullOrEmpty(searchName))
        { 
            projects = projects.Where(c =>  c.projectName.Contains(searchName));
      }

        return View(projects);
      }

非常感谢任何建议或帮助!感谢

1 个答案:

答案 0 :(得分:2)

在Where子句中使用OR运算符

您可以利用简单的OR ||运算符来测试Where()子句中单个查询中的一个或多个属性:

public ActionResult Index(string searchName)
{
      // Current projects
      var projects = db.Projects;
      // Filter down if necessary
      if(!String.IsNullOrEmpty(searchName))
      {
          projects = projects.Where(p => p.projectName.Contains(searchName) || p.projectName.Contains(searchName));
      }
      // Pass your list out to your view
      return View(projects.ToList());
  }

处理不同类型

同样,如果您有多个不同类型的属性,您可以考虑在可能的情况下解析您的术语并使用它:

if(!String.IsNullOrEmpty(searchName))
{
    // Normal search term
    var term = searchName;
    // Attempt to parse it as an integer
    var integerTerm = -1;
    Int32.TryParse(searchName, out integerTerm);
    // Now search for a contains with the term and an equals on the ID
    projects = projects.Where(p => p.projectName.Contains(term) || p.projectId == integerTerm);
}