如何在多个字段/列中搜索数据?

时间:2017-12-05 08:25:03

标签: c# asp.net-mvc-5

我尝试了这样的代码,效果很好:

查看:

@model IEnumerable<InternProject.Models.Course>
....
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm("Index", "Course", FormMethod.Get))
{
    <p>
        @Html.TextBox("searching")
        <input type="submit"  value="search" />

    </p>
} 
<table class="table table-striped">
    <thead>
        <tr>
            <th>Course ID</th>
            <th>Course Name</th>
            <th>Major</th>
            <th>Specialization</th>
            <th></th>
        </tr>
    </thead>

@foreach (var item in Model) {
    <tr>
        <td>@Html.DisplayFor(modelItem => item.crs_ID)</td>
        <td>@Html.DisplayFor(modelItem => item.crs_Course)</td>
        <td>@Html.DisplayFor(modelItem => item.crs_Major)</td>
        <td>@Html.DisplayFor(modelItem => item.crs_Specialization)</td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id = item.crs_ID }) |
            @Html.ActionLink("Details", "Details", new {id = item.crs_ID }) |
            @Html.ActionLink("Delete", "Delete", new { id = item.crs_ID })
        </td>
    </tr>
}

</table> 

控制器:

public class CourseController : Controller
{
    private DbCourse db = new DbCourse();
    public ActionResult Index(string submit, string searching)
    {
        var course = from x in db.Course select x;
        if (!String.IsNullOrWhiteSpace(searching))
        {
            return View(db.Course.Where(x => x.crs_Course.Contains(searching.Trim()) ||
                         x.crs_Major.Contains(searching.Trim()) || 
                         x.crs_Specialization.Contains(searching.Trim())).ToList());
        }
        else if (searching == null)
        {
            return View(db.Course.Where(x => x.crs_Course == searching || searching.Trim() == null).ToList());
        }
        else
        {
            return View(db.Course.ToList());
        }
    }
}

但是id不能包括在内,因为它是一个整数。我想要一个解决方案,我可以在我的数据库的id中搜索,具体取决于搜索框中的输入。

此外,对于像这样的简单搜索功能,是否有比这更好的代码?我注意到它太长了,显然违反了DRY原则。

这是我的简单应用程序的样子: enter image description here

我作为初学者在ASP.NET MVC中采取了我的步骤。

我希望通过应用编码来提高我的知识,而不仅仅是依靠教程视频 非常感谢你提前! =)

1 个答案:

答案 0 :(得分:1)

最简单的解决方案是将ID转换为字符串。您的代码将成为以下内容。

return View(db.Course.Where(x => x.crs_Course.Contains(searching.Trim()) ||
                     x.crs_Major.Contains(searching.Trim()) || 
                     x.crs_Specialization.Contains(searching.Trim()) ||
                     x.crs_crs_ID.ToString().Contains(searching.Trim())).ToList())

这不违反DRY原则,因为你在不同的变量上使用Contains();然而,反对DRY原则的是重复搜索.Trim()。我建议你在代码顶部修剪一次字符串。

var match = searching.Trim();

然后你可以在下面的代码中使用match而不是search.Trim()。