次のようなビュー モデルを持つ MVC アプリケーションを実行しています。
public class UserListViewModel
{
public UserListViewModel()
{
Users = new List<UserViewModel>();
QueriedUsers = new List<UserViewModel>();
}
public List<UserViewModel> Users { get; private set; }
public string SearchQuery { get; set; }
public List<UserViewModel> QueriedUsers { get; private set; }
}
- ユーザー: 元のユーザー
- SearchQuery : ビューによって返されるクエリ
- QueriedUsers : ユーザーがソートされた後のユーザー
私の見解では、次のコードがあります。
@using (Html.BeginForm("Search", "EditUser"))
{
@Html.EditorFor(model => Model.SearchQuery);
}
@if (Model.QueriedUsers != null && Model.QueriedUsers.Any())
{
foreach (var u in Model.QueriedUsers)
{
// do stuff
}
}
else
{
foreach (var u in Model.Users)
{
// do stuff
}
}
そして、これはコントローラーの HttpPost コードです。
[HttpPost]
public ActionResult Search(UserListViewModel input)
{
return View("EditUser",NewUserListModel(input));
}
検索フィールドで Enter をクリックする前に、次のような URL が表示されます。
http://localhost:61162/Admin/Users
Enterをクリックすると、次のようになります。
http://localhost:61162/Admin/Users/Search
ブレークポイントから、コントローラー コードが実行されていることがわかります。
新しい URL で表示されるエラーは次のとおりです。
リソースが見つかりません。説明: HTTP 404。探しているリソース (またはその依存関係の 1 つ) は、削除されたか、名前が変更されたか、一時的に利用できない可能性があります。次の URL を見直して、スペルが正しいことを確認してください。
Requested URL: /Admin/EditUser/Search
もちろん、URLが変更されたことが原因です。
私の問題を解決するためのヒントはありますか? :-) ユーザーに where 句を付けたいだけなので、検索入力に応じて関連データを表示できます。