我刚刚开始研究一个有几个区域的应用程序(基本网格主/系统细节类型......)我正在研究利用MVC中的漂亮路由功能(特别是4个)而我"只是没有得到它"我相信.
目前唯一定义的路线是基本路线:
routes.MapRoute("Default",
"{controller}/{action}/{id}",
new { controller = "Account", action = "Index", id = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
这很好,它适用于我们定义的区域,所以我假设它必须知道用户在哪里,并根据用户所在的位置/区域上下文路由到相应的控制器..到目前为止很好..
现在,我正在尝试建立一条可以处理的新路线
/someController/someAction/{statusName}
Run Code Online (Sandbox Code Playgroud)
特别是:
/OrderManager/List/New
Run Code Online (Sandbox Code Playgroud)
和
/OrderManager/List/Viewed
Run Code Online (Sandbox Code Playgroud)
其中"新"是"新"状态,并且Action Signature看起来像:
public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)
我假设我可以添加新的路由低于默认的路由标识"statusName"而不是Id,但当然,H将如何路由机制知道之间的区别:
/控制器1 /动作1/15
/控制器2 /动作2 /新
我确实尝试添加一个"静态"路径的形式
routes.MapRoute("Default",
"ControllerName/ControllerAction/{statusName}",
new { statusName = UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我以为我可以"hiJack"只是一条路线,并做一些特殊的事情,但要知道有用,路由器在第一场比赛停止?我认为无论如何这是解决这个问题的错误方法..
所以现在我想要达到这样的想法:
/somecustomroutename/somesortValue
Run Code Online (Sandbox Code Playgroud)
恩./ OrderManagerList/viewNew
这些路线基本上是"别名".我原以为添加以下路线就可以了:
routes.MapRoute("Default_List",
"OrderManagerList/{statusName}",
new {controller="OrderManager", action="List", statusName= UrlParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
与OrderManager控制器上的相关操作:
public ActionResult List(string statusName)
Run Code Online (Sandbox Code Playgroud)
无论我尝试什么,参数都为null,或者"无法找到资源"
我知道控制器需要有一个相应的View文件..但这不是问题,问题是我尝试理解路由..
所以我的问题......从根本上说,我对MVC(4)中的路由缺少什么?甚至一些像我这样的傻瓜能够理解的好文章?
我的理解; 定义路线,并映射它的"端点"..然而,我想我不理解机器正在制造的假设.
无论如何,如果需要进一步解释/编辑,请告诉我..
提前致谢.