这看起来应该很容易,但出于某种原因,我没有运气。我正在将现有的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 - 任何人都可以放弃一些光线吗?
答案 0 :(得分:0)
我真的不明白你的问题,可能是我不够熟练。无论如何,我会尝试...;)
如果要从根路径重定向,为什么不使用IIS中的默认文档,例如将其放到index.aspx中,然后在此页面中添加一个response.redirect到要重定向到的页面? / p>
答案 1 :(得分:0)
Hmmmm。所以我的浏览器崩溃了一些无关的原因,现在我已经重新启动它,上面的代码看起来像预期的那样完美。我完全混淆了服务器端代码现在如何以不同的方式运行,因为浏览器重启(显然某些东西被错误地缓存了),但看起来现在这不是问题。
编辑:嗯,这实际上仍然是一个问题 - 不知道为什么它之前有效,但它有点随机。底线似乎是MVC在某些情况下似乎不能很好地与Trace.axd解析器一起使用,否则会生成完全有效的标记。我真的没有很好的解释,但在web.config中禁用跟踪会绕过错误。为了我现在的目的,这已经足够好了,但是我希望听到其他人更好的解释......