2017-02-03 12 views
1

たとえば、[ホーム/インデックス]ページでは、データベースに情報を表示します。私は自分の検索と一致するすべての値を検索できる検索バーを作成したいと思います。データベース内のすべてのフィールドを検索する検索バーを作成するにはどうすればよいですか?

データベースには従業員、給与、IDがあります。従業員の検索ボタンを選択して「Bob」を検索します。検索にBobという名前のすべての従業員が表示されます。

私は今、私のホームコントローラーからindex.cshtmlにデータベースのすべてを表示できるようにしています。

public ActionResult Index(string employeeName){ 
//If employeeName, I return employeeName 
//else I return something else} 

しかし、複数のフィールドを検索して返す方法がわかりません。私は、オーバーロードされたActionResultsを使用することはできないことを知っているので、[ActionName]を使って試してみましたが、異なるパラメータで異なるIndexメソッドを作成しようとしました。私はエンティティモデルを実装していない既存のコードでこれを実行しようとしているため、ADO.NETエンティティモデルも使用していません。

編集 - ホームコントローラ

public class HomeController : Controller{ 

    public ActionResult NameSearch(string EmployeeName) 
    { //code to display JUST employee's name that matches the Employee variable} 
    public ActionResult SalarySearch(double salary) 
    { //code to display JUST employee's sthat matches the salary variable} 
    public ActionResult Index() 
    { 
     //return View(model); the model has all the data that will be displayed in index.cshtml 
    } 

index.cshtml-

<h2>Employee</h2> 

<form action="/" method="get"> 
<input type="text" name="EmployeeName" /> 
<input type="submit" value="Search" /> 
</form> 

<h3>Search Salary</h3> 

<form action="/" method="get"> 
    <input type="text" name="salary" /> 
    <input type="submit" value="Search" /> 
</form> 

だから、複数の検索ボックスがあります。社員の検索で「bob」を検索すると、一致するすべての名前が返されます。しかし、私は、これはたぶん私は今、質問を理解Index.cshtml

<p> 

    @using (Html.BeginForm("serialDisplay", "Home", FormMethod.Get)) 
    { 
    <p> 
     serial Number: @Html.TextBox("serialNumber") <br /> 
     <input type="submit" value="Search" /> 
    </p> 
    } 
</p> 
+0

ので、あなたがボタンに応じて、検索の異なる種類をトリガーする1つのテキストに検索キーワードを入れてフィールドが、異なるボタン(またはラジオ)の後、カップルを持っています選ばれた? –

+0

検索したいxフィールドのx検索バーがあります。 。そして、私は "従業員"の文字列を受け入れるHomeControllerのメソッドを持っていますか? – user4660931

+0

あなたのコードを見ることなく、良い提案をするのは難しいです。あなたの 'Index'メソッドは' searchField'と 'searchValue'のように2つのparmsを持つことができますし、各列の検索ボックスは' searchField'に別の値を使いますか?または、 'ViewModel'を使用し、より強く型付けされたデータを渡します。 –

答えて

0

をこのようなものを使用してIをやってしまった、

最終編集 -

私はこの右のつもりならばわかりません。あなたは本当にコントローラメソッドのシグネチャのパラメータで、コントローラの内部ロジックを行う方法ではなく、より多くのことを心配していますか?

パラメータが渡されないと、パラメータがnullまたはその他の賢明な値にデフォルト設定される可能性がありますか?

public ActionResult Index(int? id = null, string employeeName = null,double? salary = null){ 
// if id != null, add it to the where clause. 
// if employeeName != null or white space, add it to the where clause (most browsers will send it as "" if the user doesn't enter anything). 
// if salary != null, add it to the where clause, you probably actually want a salaryMin and salaryMax 

}

これはオプションのパラメータにアプローチする最も簡単な方法です、あなたはカスタムモデルバインダーを行うことができ、よりにもあります。また、Routesを使用して遊んで、提供されたパラメータに基づいて異なる名前のメソッドを送信することもできます。それはまたあなたが給与と名前を行うことができるように物事を構築することができます。

編集:MSのドキュメントへのリンクhttps://msdn.microsoft.com/en-us/library/dd264739.aspx#Optional引数

関連する問題