2016-03-21 19 views
0

私は単純な検索ボックスを追加しようとしています。エラーは発生しません。変数が正しく設定されていますが、クエリが更新されていません。ここに私のコントローラがあります。検索機能が失敗しましたasp.net mvc

public ActionResult Index(string sortOrder, string searchString) 
    { 
     ViewBag.LastNameSortParm = String.IsNullOrEmpty(sortOrder) ? "lastname_desc" : ""; 
     ViewBag.FirstNameSortParm = sortOrder == "firstname" ? "firstname_desc" : "firstname"; 
     var users = from u in UserManager.Users 
         select u; 
     if (!String.IsNullOrEmpty(searchString)) 
     { 
      users = UserManager.Users.Where(u => u.LastName.Contains(searchString)); 
            //|| u.FirstName.Contains(searchString)); 
     } 
     switch (sortOrder) 
     { 
      case "lastname_desc": 
       users = UserManager.Users.OrderByDescending(u => u.LastName); 
       break; 
      case "firstname": 
       users = UserManager.Users.OrderBy(u => u.LastName); 
       break; 
      case "firstname_desc": 
       users = UserManager.Users.OrderByDescending(u => u.LastName); 
       break; 
      default: 
       users = UserManager.Users.OrderBy(u => u.LastName); 
       break; 
     } 
     return View(users.ToList()); 

    } 

これは私の見解の中にあります。私はスミスの最後の名前を持っていると私はSに入力した場合

@using (Html.BeginForm()) 
{ 
    <p> 
     Find by name: @Html.TextBox("SearchString") 
     <input type="submit" value="Search" /> 
    </p> 
} 

私はapplicationuserモデル内で[氏名]フィールドを持っているが、searchStringのは、デバッグ中に「S」を移入しますが、ビューは更新されません。私は明白な何かを欠いていますか

答えて

2

ソート順を処理しようとしている最後のswitch文は、各ブランチで新しい値にuserを設定します。 userへのすべての上側の割り当ては、ユーザーをフィルタするその割り当てを含め、失われています。

users = UserManager.Users.Where(u => u.LastName.Contains(searchString)); 

あなたは一度だけUserManager.Usersを使用する必要があります。型の不一致が発生する可能性があり

public ActionResult Index(string sortOrder, string searchString) 
{ 
    ViewBag.LastNameSortParm = String.IsNullOrEmpty(sortOrder) ? "lastname_desc" : ""; 
    ViewBag.FirstNameSortParm = sortOrder == "firstname" ? "firstname_desc" : "firstname"; 

    var users = from u in UserManager.Users 
        select u; 

    if (!String.IsNullOrEmpty(searchString)) 
    { 
     users = users.Where(u => u.LastName.Contains(searchString));         
    } 

    switch (sortOrder) 
    { 
     case "lastname_desc": 
      users = users.OrderByDescending(u => u.LastName); 
      break; 
     case "firstname": 
      users = users.OrderBy(u => u.LastName); 
      break; 
     case "firstname_desc": 
      users = users.OrderByDescending(u => u.LastName); 
      break; 
     default: 
      users = users.OrderBy(u => u.LastName); 
      break; 
    } 
    return View(users.ToList()); 

} 

、その後、あなたが定義することができます。私たちは、ソートのものを注文したり、オブジェクトの種類を完全に私は正確なソリューションを提供することはできませんが、このような何かがうまくいくかもしれないが表示されないので、毎回ユーザーを書き換えるのではなく、各ステップでタイプ変数をIEnumerableまたはListに分けてください。

+0

ありがとうございました。私はそれが問題の組み合わせだと思う。私は2番目のusermanagerを取り出し、文字列のチェックについてスイッチを入れ、今はすべて動作します。スイッチがすべてをクリアするのはあなたのポイントでした - もう一度感謝します。 –

関連する問題