2017-12-05 18 views
0

私はそれが非常によく動作しますが、このようなコードを試してみました:複数のフィールド/列でデータを検索する方法は?

ビュー:

@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で私の赤ちゃんのステップを取っている:ここで

は私の単純なアプリケーションがどのように見えるかです。

私はチュートリアルのビデオに頼るだけでなく、適用されたコーディングを使用して自分の知識を向上させたいと考えています。
ありがとうございます! =)

+0

なぜ簡単に検索できません: Convert.ToInt32(searching.Trim()) ? – FaizanRabbani

+0

なぜ各列のテキストボックスはありませんか? –

+0

また、 'else if(searching == null)'ブロックのコードは意味をなさない。 –

答えて

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()) 

異なる変数でContains()を使用しているため、これはDRYの原則に反しません。しかし、DRYの原則に対して何が起こっているかは、繰り返し検索することです。トリム()。私はあなたのコードの一番上に一度文字列をトリムすることをお勧めします。

var match = searching.Trim(); 

次に、下記のコードでsearching.Trim()の代わりにmatchを使用できます。

+0

私はあなたが示唆したコードをまだ試していませんが、DRYの原則問題に関する解決策は意味があります。私はそれを試みます。どうもありがとうございました! – Kenny

関連する問題