2016-11-13 76 views
1

我有我的數據庫中的一個學生表,我創建了,我有一個視圖,顯示所有學生按班級分類列表...在視圖頂部一個文本框和一個搜索按鈕,可以更快地訪問學生信息。問題是,當我在文本框中輸入名字和姓氏時,什麼都沒有出現。當我只輸入第一個名字或只輸入姓氏時,就會找到它。我是編程新手,我無法弄清楚如何使它工作。如果有人能幫助我,我會很感激。這是我的代碼部分:在ASP.NET MVC中的搜索功能不能正常工作

[HttpGet] 
public ActionResult ViewStudents() 
{ 
    ViewBag.classes = db.Courses.ToList(); 
    var studentCourses = db.StudentCourses.OrderBy(s=>s.Person.FirstName).ToList(); 

     return View(studentCourses); 
} 

[HttpPost] 
public ActionResult ViewStudents(string SearchString) 
{ 
    var student=new List<int>(); 
    List<StudentCourse>sc=new List<StudentCourse>(); 
    ViewBag.classes = db.Courses.ToList(); 
    var studentCourse=db.StudentCourses.ToList(); 
    var studentCourses = db.StudentCourses.OrderBy(s => s.Person.FirstName).ToList(); 
    var substring = SearchString.IndexOf(" ").ToString(); 
    if (!string.IsNullOrEmpty(SearchString)) 
    { 
     student = (from p in db.People 
        where (p.FirstName.Contains(SearchString)) && (p.LastName.Contains(substring))||((p.FirstName.Contains(SearchString)) || (p.LastName.Contains(SearchString))) 
        select p.PersonId).ToList(); 
    } 
    foreach (var s in studentCourse) 
    { 
     foreach (var i in student) 
     { 
      if (s.StudentId == i) 
      { 
       sc.Add(s); 
      } 
     } 
    } 
    return View(sc); 
} 

這是我的看法:

@model List<SchoolFinalProject.Models.StudentCourse> 
@using (Html.BeginForm()) 
{ 
    <div style="font-size:16px;"> <input type="text" id="search" placeholder="search" Name="SearchString" /><span class="glyphicon glyphicon-search"></span> 
    <input type="submit" value="search"></div> 
} 
@{ 
    List<int> c = new List<int>(); 
    foreach (var courses in ViewBag.classes) 
    { 
     foreach(var s in Model) 
     { 
      if(courses.CourseId==s.CourseId) 
      { 
       c.Add(courses.CourseId); 
      } 
     } 
    } 
} 

@foreach (var course in ViewBag.classes) 
{ 
    if(c.Contains(course.CourseId)) 
    { 
     <h2>@course.Name<span>-</span>@course.Gender</h2> 
     <table class="table table-hover table-bordered table-striped"> 
      <tr><th>First Name</th><th>Last Name</th><th>Email</th><th>Phone Number</th><th>Address</th><th>Date Of Birth</th></tr> 
      @foreach (var s in Model) 
      { 
       if(course.CourseId==s.CourseId) 
       { 
        <tr> 
         <td>@s.Person1.FirstName</td> 
         <td>@s.Person1.LastName</td> 
         <td>@s.Person1.Email</td> 
         <td>@s.Person1.PhoneNumber</td> 
         <td>@s.Person1.Address</td> 
         <td>@s.Person1.DateOfBirth</td> 
         <td> 
          <span class="glyphicon glyphicon-edit"></span> 
          @Html.ActionLink("Edit", "Edit","Person", new { id = s.Person1.PersonId }, null) | 
          <span class="glyphicon glyphicon-trash"></span> 
          @Html.ActionLink("Details", "Details","Person", new { id = s.Person1.PersonId }, null) 
         </td> 
        </tr> 
       } 
      } 
     </table> 
    } 
    } 

<a href="#top" title="Go to top of page">Go to top of page</a> 
this is my person Model: 
public partial class Person 
{ 
    public Person() 
    { 
     this.Bonus = new HashSet<Bonu>(); 
     this.ConversationHistories = new HashSet<ConversationHistory>(); 
     this.ConversationHistories1 = new HashSet<ConversationHistory>(); 
     this.EmployeePaymentDetails = new HashSet<EmployeePaymentDetail>(); 
     this.StudentCourses = new HashSet<StudentCourse>(); 
     this.StudentCourses1 = new HashSet<StudentCourse>(); 
     this.TeacherCourses = new HashSet<TeacherCourse>(); 
     this.Reminders = new HashSet<Reminder>(); 
    } 

    public int PersonId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string UserName { get; set; } 
    public string Email { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Address { get; set; } 
    public Nullable<System.DateTime> DateOfBirth { get; set; } 
    public PersonType PersonTypeId { get; set; } 
    public Nullable<System.DateTime> LastModified { get; set; } 
    public Nullable<int> Gender { get; set; } 
    public Nullable<int> Status { get; set; } 
    public string FullName 
    { 
     get { return FirstName + ", " + LastName; } 
    } 
    public virtual ICollection<Bonu> Bonus { get; set; } 
    public virtual ICollection<ConversationHistory> ConversationHistories { get; set; } 
    public virtual ICollection<ConversationHistory> ConversationHistories1 { get; set; } 
    public virtual ICollection<EmployeePaymentDetail> EmployeePaymentDetails { get; set; } 
    public virtual ICollection<StudentCourse> StudentCourses { get; set; } 
    public virtual ICollection<StudentCourse> StudentCourses1 { get; set; } 
    public virtual ICollection<TeacherCourse> TeacherCourses { get; set; } 
    public virtual ICollection<Reminder> Reminders { get; set; } 
} 
} 

回答

1

你可能想嘗試串聯在人模型中的第一和最後一個名稱的屬性是這樣的:

[Display(Name = "Full Name")] 
    public string FullName 
    { 
     get 
     { 
      return LastName + ", " + FirstMidName; 
     } 
    } 

有一個非常好的教程,你在這裏要做什麼:https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-a-more-complex-data-model-for-an-asp-net-mvc-application

A LSO看到相同的本教程的這一頁:https://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application

順便說一句,你可能要檢查出使用數據表插件,它爲您提供了搜索功能,而不具有與每個搜索查詢數據庫:https://datatables.net

+0

感謝幫助我。我在我的人模型中添加了這個,我應該在我的動作方法中怎麼樣?你能看看我的代碼,並詳細地告訴我,我應該改變什麼以及我應該怎麼做。謝謝!! –

+0

我的ViewModel應該如何? –

+0

我是新的自己,但我會嘗試有一個屬性,其中包含名和姓的連接,然後通過搜索。例如:如果 – Pennywise