我正在开发一个基本的问题管理系统以学习 ASP.NET MVC。我已经把它启动并运行到一个相当不错的水平,但我遇到了一个问题。
我有一个名为 Issue 的控制器,带有一个名为 Open 的视图。/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());
}
这工作正常(虽然,我想知道是否有比开关更好的方法来处理我的查询定义?)但现在我希望能够在 Open Issues 视图上做两件事:
- 按任何标题排序 - 好的
- 过滤某些标题(技术人员、客户、类别、优先级、状态) - ??
我不知道如何将两个参数传递给控制器,以便我可以组织我的查询。我也刚刚意识到,除非我弄清楚如何动态生成我的查询,否则我将需要(排序选项的数量)*(过滤器选项的数量)在我的开关中。
啊,谁能指出我正确的方向?干杯!