2017-10-14 25 views
0

私はWebアプリケーションプロジェクトで作業しています。私はajaxを使用して検索を組み込もうとしています。ASP.NET MVC 5 - nullパラメータを持つajax.beginform()

私はajax.beginform()を使用して検索フォームを作成しましたが、少し問題があります: 私のテキストボックスフィールドが空で検索をクリックすると、(検索が行われていない)空のビューを返します。 文字列がヌルだが成功していないかどうかをコントローラでチェックしようとしました。

1.テキストフィールドが空のときにパラメータが取得する値は?

2.このフォームでいくつかのパラメータを送信しますか?

ありがとうございます!

テルアビブ

.cshtml - ビュー

@using (Ajax.BeginForm("BranchSearch", "Branches", 
     new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "searchResults" })) 
{ 
    <h3>Search:</h3> 
    <p>Branch name :</p>@Html.TextBox("Search", null, new { id = branchname"}) 
    <input type="submit" value="Search" class="btn btn-primary" /> 
} 

は.cs - コントローラ

public PartialViewResult BranchSearch(String branchname, String country) 
{ 
    List<Branches> model = (from p in db.Branches 
         select p).ToList(); 

    if(branchname!=null) 
     { 
     model = model.Where(x => x.BranchName.Equals(branchname)).ToList(); 
     } 

     return PartialView("BranchSearch",model); 
}  
+0

を呼び出す前に、model上の別のWhere句を追加... ?? –

答えて

2

、ユーザが入力された検索ボックスに何も入力してフォームを送信しません。 、スクリプトは空の文字列を送信します。したがって、ヌルまたは空の文字列をチェックする必要があります。

if (!string.IsNullOrEmpty(branchname)) 
{ 
    model = model.Where(x => x.Branchname.Equals(branchname)).ToList(); 
} 

また、アクションメソッドのパラメータ名は入力要素名と一致する必要があります。

@Html.TextBox("branchname") 

また、あなたはあなたのWhere句の前にToList()を呼び出す必要はありません。最後にLINQクエリ式が評価され、フィルタリングされた結果が得られます。大文字小文字を区別しない検索を使用する場合は、メソッドのオーバーロードで大文字小文字を区別しないStringComparison列挙値のいずれかを使用します。

public PartialViewResult BranchSearch(String branchname, String country) 
{ 
    IQueryable<Branch> model = db.Branches; 
    if (!string.IsNullOrEmpty(branchname)) 
    { 
     model = model.Where(x => x.BranchName.Equals(branchname 
             ,StringComparison.OrdinalIgnoreCase)); 
    } 
    // Now we are ready to query the db and get results. Call ToList() 
    var result = model.ToList(); 
    return PartialView("BranchSearch", result); 
} 

あなたは複数のフィルタを実行したい場合は、「国」paramはから来ている(私たちはbranchNameのためにしたものと同じ)ToList()

+1

ありがとうございます!それは働いています:) –

+0

** @ Html.TextBoxFor(m => m.BranchName、新しい{@class = "form-control"})**は、Branchnameという名前とIDの両方を持つ入力を作成するので、提出する前に関連する検証も実行します –

関連する問題