2010-03-30 71 views
0

这似乎应该很容易,但由于某种原因,我没有运气。我正在将现有的WebForms应用程序迁移到MVC,因此我需要将网站的根目录指向我现有的aspx页面,并且仅将路由应用于指定的路由。下面是我有:ASP.NET MVC路由 - 重定向到aspx?

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.IgnoreRoute("{resource}.aspx/{*pathInfo}"); 

     RouteTable.Routes.Add(
      "Root", 
      new Route("", new DefaultRouteHandler()) 
     ); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Calendar2", action = "Index", id = "" } // Parameter defaults 
     ); 
    } 

所以ASPX页面应该被忽略,默认的根URL应该由该处理程序进行处理:

public class DefaultRouteHandler : IRouteHandler 
{ 
    public IHttpHandler GetHttpHandler(RequestContext requestContext) 
    { 
     return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
       "~/Dashboard/default.aspx", typeof(Page)) as IHttpHandler; 
    } 
} 

这似乎是工作确定,但由此产生的YPOD给我这个:

找到了具有相同ID的多个控件 '__Page'。跟踪需要 控件具有唯一的ID。

这似乎意味着该页面以某种方式越来越呈现两次。如果我直接输入网址到我的仪表板页面,它可以正常工作(没有路由,没有错误)。我不知道为什么处理程序代码会做不同的事情。底线 - 我想简单地将根网址路径重定向到我选择的aspx - 任何人都可以点亮一些光线吗?

回答

0

嗯。所以我的浏览器因为一些不相关的原因而崩溃了,现在我已经重启了它,上面的代码看起来像预期的那样完美。我对服务器端代码因为浏览器重启而现在的行为方式完全感到困惑(显然不知怎么的东西被我缓慢地错误地缓存了),但是现在看来这已经不是问题了。

编辑:嗯,这实际上仍然是一个问题 - 不知道为什么它以前工作,但它有点随机。底线似乎是,在某些情况下,MVC似乎不能很好地跟踪Trace.axd解析器,否则会产生完全有效的标记。我真的没有一个很好的解释,但禁用web.config中的跟踪绕过了错误。对于我现在的目的来说,这已经足够好了,但我很乐意听到其他人更好的解释...

0

我真的不明白你的问题,可能我不够熟练。无论如何,我会尝试...;)

如果你想从根路径重定向,为什么不使用从IIS的默认文件,例如把它放在index.aspx,然后在这个页面添加一个response.redirect到您想要重定向到的页面?

+0

我的问题是特定于ASP.NET MVC的,所以这并不适用。 – 2010-03-30 13:45:10