ASP.NET MVC を学ぶために、基本的な問題管理システムに取り組んでいます。私はそれを立ち上げてかなりまともなレベルまで実行しましたが、問題に遭遇しました.
Openというビューを持つIssueという名前のコントローラーがあります。/Issue/Open には、現在システムに記録されている未解決の問題がすべて一覧表示されます。次のようにルートを定義しました。
routes.MapRoute(
"OpenSort", // Route name
"Issue/Open/{sort}", // URL with parameters
new { controller = "Issue", action = "Open", sort = "TimeLogged" } // Parameter defaults
);
これは、IssueController.cs で次のコードを使用して、これまでのところ正常に機能しています。
public ActionResult Open(string sort)
{
var Issues = from i in db.Issues where i.Status == "Open" orderby i.TimeLogged ascending select i;
switch (sort)
{
case "ID":
Issues = from i in db.Issues where i.Status == "Open" orderby i.ID ascending select i;
break;
case "TimeLogged":
goto default;
case "Technician":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Technician ascending select i;
break;
case "Customer":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Customer ascending select i;
break;
case "Category":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Category ascending select i;
break;
case "Priority":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Priority ascending select i;
break;
case "Status":
Issues = from i in db.Issues where i.Status == "Open" orderby i.Status ascending select i;
break;
default:
break;
}
ViewData["Title"] = "Open Issues";
ViewData["SortID"] = sort.ToString();
return View(Issues.ToList());
}
これは問題なく動作しています (ただし、クエリの定義を処理するためのスイッチよりも優れた方法があるのではないかと思います) が、[未解決の問題] ビューで次の 2 つのことを実行できるようにしたいと考えています。
- 任意の見出しで並べ替え - OK
- 特定の見出し (技術者、顧客、カテゴリ、優先度、ステータス) でフィルター処理する - ??
クエリを整理できるように、コントローラーに 2 つのパラメーターを渡す方法がわかりません。また、その場でクエリを生成する方法を理解しない限り、スイッチに (並べ替えオプションの数) * (フィルター オプションの数) が必要になることにも気付きました。
ああ、誰かが私を正しい方向に向けることができますか? 乾杯!