ASP.NET MVC中在路由表routes集合中添加Route实例的问题

昨天有位同学问到关于在routes集合中添加自定义的路由实例的问题,她出现的问题是这样的:

1.因为要在应用程序戾动时将实例添加到routes表中,所以需要把代码写在Global类的RegisterRoutes方法中,代码如下两种方式:

   routes.Add("s", new Route("a/b", new WebFormRouteHandler("~/WebForm1.aspx")));

   routes.Add("a", new Route("c/b", new RouteValueDictionary { { "controller", "Default" }, { "Home", "Index" } }, new WebFormRouteHandler("~/WebForm1.aspx")));

其中,a为路由的名称,Route为路由的实例,同时,用到了一个WebFormRouteHandler的自定义类,该类的作用为处理一个虚拟路径并指定到一个实际的地址,具体代码如下:

public class WebFormRouteHandler : MvcRouteHandler
        {
            private string VirtualPath;
            public WebFormRouteHandler(string path)
            {
                VirtualPath = path;
            } 

            protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler; 

                return page;
            }
        }

她的问题是,用上边第一种方式,那么在做RedirectToAction()操作时,就会直接跳转到WebForm1.aspx页面,而使用第二种方式时,则正常,只有在访问c/b时,才会访问到该页面。

对比上面两段代码,实际上第二种方式只是多了一个关于RouteValueDictionary类的实例,微软官方对这个实例的定义为:

表示不区分大小写的键/值对的集合,您可以在路由框架中的不同位置(例如,在定义路由的默认值时或在生成基于路由的 URL 时)使用该集合。

其实这个对象的创建,可以为url也就是c/b定义了一种默认的访问规则,那么url就一定会按照这种规则去访问指定的页面。

本文出自 “张剑的技术专栏” 博客,请务必保留此出处http://jianle.blog.51cto.com/429692/727680

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索实例
, 路由
, 代码
, 一个
, 方式
, Routes
, mvc默认路由
路由实例代码
,以便于您获取更多的相关知识。

时间: 2024-12-31 18:34:29

ASP.NET MVC中在路由表routes集合中添加Route实例的问题的相关文章

ASP.NET MVC 5 - 给电影表和模型添加新字段

原文:ASP.NET MVC 5 - 给电影表和模型添加新字段 在本节中,您将使用Entity Framework Code First来实现模型类上的操作.从而使得这些操作和变更,可以应用到数据库中. 默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework Code First自动创建一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生成的模型类是同步的.如果他们不是同步的,Entity Framework将抛出一个错误.这非常方便的在

python过滤字符串中不属于指定集合中字符的类实例

  本文实例讲述了python过滤字符串中不属于指定集合中字符的类.分享给大家供大家参考.具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # -*- coding: utf-8 -*- import sets class Keeper(object): def __init__(self, keep): self.keep = sets.Set(map(ord, keep)) def __getitem__(self, n): if n

asp.net中linq查本集合中不包含于另一个集合的元素

 代码如下 复制代码 int[] num0 = { 28, 32, 14 };int[] num1 = {14,15,16}; 如上,我想把num0中不包含于num1的元素都找出来,其正确结果应该是28,32.早上看到原来linq可以写多个from字句,之后就想到了这样的写法:  代码如下 复制代码 int[] num0 = { 28, 32, 14 };int[] num1 = {14,15,16}; var qq = from n1 in num0from n2 in num1where n

Asp.net MVC 2.0 + Unity 2.0(IoC) + EF4.0 实例:RoRoWoBlog 开源项目框架代码

本开源项目当前使用框架如下: 前台表现:Asp.net MVC 2 数据持久层:ADO.Net Entity Framework 4.0 依赖注入容器:Unity 2.0 开发工具:VS2010   开源项目地址:http://rorowo.codeplex.com/   我这次国庆的时间  主要改了以下内容:1.改为POCO,使EF的实体纯净2.增加 IoCHelper类,把IoC的代码改为可以同时支持多种IoC3.修改基础结构层,使其可以支持多种ORM框架 4.修正继承自 DefaultCo

记一次ASP.NET MVC性能优化(实际项目中)

前言 在开发中为了紧赶项目进度而未去关注性能的问题,在项目逐渐稳定下来后发现性能令人感到有点忧伤,于是开始去关注这方面,本篇为记录在开发中遇到的问题并解决,不喜勿喷.注意:以下问题都是在移动端上出现,无法确定在网站中是否也同样会出现. 卡顿问题 请求方式 项目属于移动端,在手机上查看某一列表时并进行向下滑动时经常性卡顿问题,滚动的插件采用的是iscroll,当然怀疑是不是这个插件问题,但是很快就排除了这个问题,在其他页面未出现这个问题,后来接着想因为在脚本中进行Ajax请求超时时间设置为30秒,

Ajax请求asp.net MVC查出的列表数据转成DTO的实例

我们的示例数据库脚本: USE [DB_USERS] GO /****** Object:  Table [dbo].[Student]    Script Date: 11/06/2015 00:01:52 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO CREATE TABLE [dbo].[Student](     [s_ID] [INT] IDENTITY(1,1) NOT 

使用ajax传集合到页面中,想获取集合中的对象属性,但这对象的属性又是另一个对象,我该怎么获取?

问题描述 比如说,现有两个实体:学校(School)和年级(Grade):School中属性有name(学校名称),Grade(年级对象),address(地址):Grade中属性有name(年级名称),stuCount(学生人数),classCount(班级数)之后,我有一个学校对象的集合schoolList,我在用ajax技术向页面传值时,name值和address值都能获取到,然而此集合的Grade对象中的属性我该怎么获取呢?最好能用代码详细解释一下,在此我就先谢过了

对ASP.NET MVC项目中的视图做单元测试

关于视图的单元测试 说到ASP.NET MVC,我们似乎始终都在关注对于Controller的测试--虽然Stephen Walther也写过如 何脱离Web Server对View进行单元测试,但是他的方法可看而不可用.复杂的构造和预备,以及对生成的 HTML字符串作判断--这真是在对视图做单元测试吗?仔细分析他的代码可以发现,这其实是在对 ViewEngine做单元测试.而且,如果真要对ViewEngine做单元测试,也不应该像他那样依赖外部文件.在 我看来,他的做法什么都不是--似乎美观,

Asp.net Mvc中MVCContrib中无法使用Castle的发解决方案

在使用Asp.net Mvc MVCContrib 0.0.1.91中的Castle时会出现No component for key Home was found这样的错误 错误解决方法如下: 下载MvcContrib源代码,更改MvcContrib.Castle的 WindsorControllerFactory.cs中的34行CreateController方法为: public IController CreateController(RequestContext context, str