【发布时间】:2013-01-12 11:21:01
【问题描述】:
我刚开始开发一个有几个领域的应用程序(基本的网格主/细节类型系统..)我正在考虑利用 MVC 中的好路由功能(特别是 4),我“只是没有明白了”我猜。
目前唯一定义的路由是基本路由:
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);
这很好,它适用于我们定义的区域,所以我假设它必须知道用户在哪里,并根据用户所在的位置/区域根据上下文路由到适当的控制器......到目前为止不错..
现在,我正在尝试设置一条可以处理的新路线
/someController/someAction/{statusName}
特别是类似的东西:
/OrderManager/List/New
与
/OrderManager/List/Viewed
其中“新”是“新”状态,动作签名如下所示:
public ActionResult List(string statusName)
我假设我可以将新路由添加到标识“statusName”而不是 Id 的默认路由下方,但当然,路由机制如何知道 H 之间的区别:
/controller1/action1/15
/controller2/action2/新
我确实尝试以
的形式添加“静态”路由routes.MapRoute("Default",
"ControllerName/ControllerAction/{statusName}",
new { statusName = UrlParameter.Optional }
);
我以为我可以“hiJack”那条路由并对其做一些特别的事情,但要知道是否有用,路由器会在第一次匹配时停止?无论如何,我假设这是解决此问题的错误方法..
所以现在我正在考虑达到以下目标:
/somecustomroutename/somesortValue
例如。 /OrderManagerList/viewNew
这些路线基本上是“别名”。我原以为添加以下路线可以解决问题:
routes.MapRoute("Default_List",
"OrderManagerList/{statusName}",
new {controller="OrderManager", action="List", statusName= UrlParameter.Optional }
);
与 OrderManager 控制器上的相关操作:
public ActionResult List(string statusName)
不管我怎么尝试,参数都是null,或者“找不到资源”
我知道控制器需要有一个相应的视图文件..但这不是这里的问题,问题是我试图理解路由..
所以我的问题.. 从根本上说,我对 MVC (4) 中的路由缺少什么?甚至一些像我这样的傻瓜能理解的好文章?
我的理解;定义一条路线,并映射它的“端点”..但是,我认为我不理解机器所做的假设..
无论如何,如果需要进一步解释/编辑,请告诉我..
提前致谢。
【问题讨论】:
-
对于初学者,请查看
constraints参数。您可以提供constraints: new { statusName = @"^[a-zA-Z]+$" }并使其成为一个单词,而不是constraints: new { statusId = @"^\d+$" }。尽管如此,我可能会考虑使用不同类型的路线,而不是依赖约束。类似于OrderManagerList/ByStatusName/{statusname}与OrderManaerList/ByStatusId/{statusId} -
@BradChristie - 感谢您的反馈。我确实看到了一些关于约束的信息。我可以看到它在工作,但更愿意让路由正确。在这个例子中:OrderManagerList/ByStatusName/{statusname} 我需要定义一个单独的路由来处理它吗?还是只是定义:OrderManagerList(Controller) / ByStatusName (Action) /{statusName}(variable)?我想我不确定如何控制该 URL 映射到严格命名约定以外的其他内容。再次感谢
-
确实,您可以使用泛型,但保持
{argument}模糊。例如:OrderManage/{action}/{filter}&new { controller = "OrderManage", filter = UrlParameter.Optional }然后ActionResult ByStatusName(String filter)&ActionResult ByStatusIs(Int32? filter)。
标签: asp.net-mvc asp.net-mvc-4 routing asp.net-mvc-routing