asp.net-mvc – 使用自定义段变量设置ASP.Net MVC 4路由
我刚开始研究一个有几个区域的应用程序(基本的网格主/系统细节类型……)我正在研究利用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 其中“新”是“新”状态,并且Action Signature看起来像: public ActionResult List(string statusName) 我假设我可以添加新的路由低于默认的路由标识“statusName”而不是Id,但当然,H将如何路由机制知道之间的区别: /控制器1 /动作1/15 /控制器2 /动作2 /新 我确实尝试添加一个“静态”路径的形式 routes.MapRoute("Default","ControllerName/ControllerAction/{statusName}",new { statusName = UrlParameter.Optional } ); 我以为我可以“hiJack”只是一条路线,并做一些特殊的事情,但要知道有用,路由器在第一场比赛停止?我认为无论如何这是解决这个问题的错误方法.. 所以现在我想要达到这样的想法: /somecustomroutename/somesortValue 恩. 这些路线基本上是“别名”.我原以为添加以下路线就可以了: routes.MapRoute("Default_List","OrderManagerList/{statusName}",new {controller="OrderManager",action="List",statusName= UrlParameter.Optional } ); 与OrderManager控制器上的相关操作: public ActionResult List(string statusName) 无论我尝试什么,参数都为null,或者“无法找到资源” 我知道控制器需要有一个相应的View文件..但这不是问题,问题是我尝试理解路由.. 所以我的问题……从根本上说,我对MVC(4)中的路由缺少什么?甚至一些像我这样的傻瓜能够理解的好文章? 我的理解;定义路线,并映射它的“端点”..但是,我想我不理解机器正在制造的假设. 无论如何,如果需要进一步解释/编辑,请告诉我.. 提前致谢. 解决方法
路由的基本原则是从上到下对它们进行评估,路由系统使用第一个匹配,而不是最佳匹配.
这意味着您必须按特定顺序排列您的路线,首先是最具体的路线,最后是最常规的路线. 考虑到这一原则,让我们来看看你的情况.最初,您只定义了默认路由: routes.MapRoute("Default",id = UrlParameter.Optional } ); 网址格式为“{controller} / {action} / {id}”.就其本身而言,这将匹配任何三段URL,并且不会匹配少于三个段的任何URL.但是,第三个输入参数是默认参数,它定义第一个和第二个段的默认值,并指示第三个段是可选的.这样做的下一个效果是使路由匹配URL具有0,1,2或3个段. 现在,您要添加第三个URL段映射到“statusName”参数的路由,并且可以处理以下URL: OrderManager/List/New OrderManager/List/Viewed 您可以在此处采用两种基本方法.您可以1)创建一个非常具体的路由,只处理这两个URL,或2)您可以尝试创建一个更通用的路由来处理一般情况.让我们先来看第一个案例.您可以按如下方式创建路线: routes.MapRoute("","OrderManager/List/{statusName}",new { Controller = "OrderManager",Action = "List" }); 请注意,由于此路由比默认路由更具体,因此必须将此路由放在默认路由之前. 如果您想要更通用的路由,则需要确定此路由与默认路由的区别,因为它们都将匹配具有三个段的URL.假设您决定新路由将接受仅包含第三段中的字母的任何内容,保留默认路由以处理包含数字的任何内容.您可以使用路径约束来完成此操作.例如,您可以按如下方式编写路线: routes.MapRoute( name: "Default",url: "{controller}/{action}/{id}",defaults: new { controller = "Home",id = UrlParameter.Optional },constraints: new { id = @"^d+$" }); routes.MapRoute( name: "NewRoute",url: "{controller}/{action}/{statusName}",defaults: new { Controller = "OrderManager",Action = "List" },constraints: new { statusName = "^[A-Za-z]+$" }); 使用这两个路由,任何三段URL在第三段中只有字母将把第三段放入一个名为“statusName”的变量,而在第三段中带有整数的任何URL都会将第三段放入一个名为“ ID”. 在任何真正复杂的应用中,路由可能会变得复杂,为路由编写单元测试非常有利,以确保在添加或修改路由时不会搞砸. 有关路由的详细参考,请参阅Scott Sanderson’s book或参见MSDN documentation (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在链接文本中使用HTML元素创建一个ActionLi
- asp.net – 现在跟踪谁在网站上
- asp.net-mvc – MVC 5 WebRequest URL中的尾随点导致404
- asp.net-mvc – 为什么MvcApplication.RegisterRoutes被定义
- asp.net-mvc – Sitecore在我的MVC解决方案中提供了一个空白
- asp.net – 如何在KeyUp上进行文本框回发?
- asp.net中gridview的查询、分页、编辑更新、删除的实例代码
- asp.net – Gridview行编辑 – 动态绑定到DropDownList
- 如何在ASP.NET MVC3中包含来自局部视图的JavaScript
- asp.net – SQL Server应用程序角色,性能命中
- 在asp.net webforms中使用jquery调用webmethod
- ASP.Net Core 2.0 Webapi设置了log4net
- asp.net – NServiceBus在Web / MVC4 SQL架构中有
- 如何在ASP.net MVC中正确执行异步方法?
- 在ASP.net中复制PHPBB密码哈希c#
- Cassini上的ASP.NET MVC:如何强制“内容”目录返
- asp.net – 在WCF中将对象数组序列化为JSON以符合
- asp.net – WebResource.axd空白或找不到
- 代码翻译:ASP.NET Server.Transfer in PHP
- asp.net – jQuery / ASP MVC – “$.ajax”调用