我正在处理ASP.NET MVC任务列表,我想在过滤列表时使用URL路由。我有一个这样定义的操作方法:带有可选URL段的ASP.NET路由
public ActionResult List(int categoryID, bool showCompleted, TaskFilter filter);
enum TaskFilter { MyTasks, MyDepartmentTasks, AllTasks }
我想我的网址看起来像这样:
/Tasks/Category4/MyTasks/ShowCompleted/
/Tasks/Category4/MyDepartment
/Tasks/Category4/
的Category#
段将始终存在。我希望MyTasks|MyDepartment|AllTasks
细分受众群是可选的,如果不存在,则默认为AllTasks
。我也想ShowCompleted
是可选的,默认为false。
这种路由是可能的,还是我将不得不倒退,只是使用查询字符串参数?
跟帖/加分问题:如果我也想对动作方法的第四个参数通过一个看起来像Today|Day2Through10
(默认Today
如果缺席)任务的截止日期来过滤?
谢谢。出于好奇,我必须做什么才能将一个TaskFilter作为一个Enum而不是一个字符串传递给操作方法?哪一部分路由基础设施需要扩展/覆盖? – 2009-10-20 16:01:42
@Brant Bobby:这是一个有趣的问题。通过为你的TaskController实现IController而不是Controller可能是可能的。你会在哪里实现Execute方法,首先将字符串更改为TaskFilter类型,然后用它来调用你的List方法。 – 2009-10-20 16:35:19
@Brant Bobby:我也注意到你仍然可以从Controller继承,并重写Execute方法。在那里还有其他一些有趣的方法可能是有可能的。 – 2009-10-20 16:55:46