ASP.NET MVC路由 - 重定向到aspx?

时间:2010-03-30 06:47:39

标签: asp.net asp.net-mvc url-routing asp.net-mvc-routing

这看起来应该很容易,但出于某种原因,我没有运气。我正在将现有的WebForms应用程序迁移到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 - 任何人都可以放弃一些光线吗?

2 个答案:

答案 0 :(得分:0)

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

如果要从根路径重定向,为什么不使用IIS中的默认文档,例如将其放到index.aspx中,然后在此页面中添加一个response.redirect到要重定向到的页面? / p>

答案 1 :(得分:0)

Hmmmm。所以我的浏览器崩溃了一些无关的原因,现在我已经重新启动它,上面的代码看起来像预期的那样完美。我完全混淆了服务器端代码现在如何以不同的方式运行,因为浏览器重启(显然某些东西被错误地缓存了),但看起来现在这不是问题。

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