所以我有一个webforms和一个mvc应用程序结合起来,我正在尝试正确地路由。 我的默认路由按预期工作,但是当我在其中一个视图中单击一个actionlink时,它没有路由到正确的页面。

这是我的路由代码。

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

           routes.MapPageRoute("",
               "", "~/Default.aspx", true);

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Chips", action = "Index", id = UrlParameter.Optional }
            );



        }


        void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup

           AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();

        }

这是我要点击的动作链接: @Html.ActionLink("Properties Editor", "Index", "Property")

这是我的预期结果: urlgoeshere.com/Property/Index

这是我的实际结果: urlgoeshere.com/?action=Index&controller=Property

我不确定要改变什么来弥补这种情况? 有任何想法吗?

===============>>#1 票数:2 已采纳

我最终不得不添加路由约束。 这就是我最终做的事情。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

          routes.MapPageRoute("",
               "", "~/Default.aspx", true, null, new RouteValueDictionary { { "outgoing", new PageConstraint() } });


            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Chips", action = "Index", id = UrlParameter.Optional }
            );

和页面约束。

public class PageConstraint : IRouteConstraint
    {
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (routeDirection == RouteDirection.IncomingRequest)
                return true;
            return false;
        }
    }

===============>>#2 票数:0

我想这可能是因为匹配的第一个路由是Default.aspx路由,所以它使用URL,“”。 在MVC中,提供但未包含在路径中的任何参数都会自动添加为查询字符串值。

路由按照定义的顺序被选中,因此尝试移动routes.MapPageRoute("", "", "~/Default.aspx", true); 在默认路线之后。 如果执行此操作,您可能需要删除控制器默认值,否则将获取此路由以获取将传递给Chips控制器上的Index操作的URL“”。

  ask by Reid Mac translate from so

未解决问题?本站智能推荐:

2回复

使用MVC路由覆盖Web表单

我正在研究一个现有的ASP.NET Webforms项目-慢慢更新到MVC。 我试图通过路由到新的MVC控制器来有条件地覆盖某些现有的Webforms页面。 我可以轻松地将“ example.aspx” URL路由到MVC控制器,但是如果存在现有的“ example.aspx”文件,则该UR
1回复

map使用ASP.NET 4转到Web窗体

我有这样的网址 HTTP://本地主机:4737 /网站/列表/ NH /的Plaistow / 2831516 我希望它能够重新路由到 HTTP://本地主机:4737 /网站/ listing.aspx 我正在阅读如何为Web窗体执行此操作http://www.4gu
1回复

路由错误混合Web窗体和MVC

我正在使用混合了MVC的Web窗体Web应用程序。 我已按照此页面上的说明进行操作, 网址为http://www.packtpub.com/article/mixing-aspnet-webforms-and-aspnet-mvc ,它在VS2010开发人员服务器中工作正常,但是当我尝试将其发
2回复

使用MVC URL路由覆盖目录列表

最近,我部分转换了Asp.Net Web窗体应用程序以使用MVC。 我们仍然以Web表单(.aspx页)形式保留应用程序的某些部分,并使用MVC路由来与Controllers等一起使用。 我添加了一条MVC路线,例如 有一个名为“用户”的文件夹,其中包含一些我们仍在使用的aspx页面
1回复

将旧版Web表单网址路由到MVC控制器/操作?

我们正计划将旧式Web表单逐步转换为MVC。 (并学习MVC!) 我想知道,路由是否是一次用一个控制器/动作代替旧的Webforms页面的适当方法,而不起作用。 现在,我们有了在创建MVC区域并使用nuget将MVC添加到项目时为我们生成的代码: 因此,带有动作“ bar”的控
1回复

如何在VS2013 Web项目中同时使用WebForm和MVC进行路由

我已经将网站项目从VS2010转换为VS2013中的Web应用程序项目。 现在,我想将VS2012 MVC4项目集成到该VS2013项目中。 因此,我在这个新的VS2013项目中创建了一个MVC区域,称为Test。 因此,在“测试区域”文件夹中创建了一个新类,如下所示: 在“测试”
2回复

ASP.NET 4 URL路由Web表单打破了我对样式,脚本,图像等的相对路径

我有一个带有链接的应用程序,例如default.aspx ... 添加URL路由后,它破坏了我的相对路径。 因此,如果我深入研究路由,那么该页面将找不到图像,脚本等。我可以想象我的jQuery服务调用也可能已损坏。 除了在每个相对引用的开头添加“ /”以外,是否还有其他方法可以解决此
1回复

如何从“路由”表中的路由生成路径/ URL?

我有一个ASP.NET MVC Web应用程序,并且已经在Global.asax中注册了许多路由。 我想知道如何从控制器内部以编程方式构建(生成字符串url)任何这些已注册的路由。 我使用Page.GetRouteUrl(routeName, routeParams)在带有.NET
1回复

使用MVC路由重定向.aspx网页

我有ASP.NE Web Forms应用程序,其中有ASP.NET MVC区域(带有剃刀视图引擎) 我在此位置有一个aspx页面project/pages/email.aspx无论是来自爬网代理还是某些用户,他们都可以请求http://wwww.mydomain.com/pages/ema
1回复

ASP.NET MVC WebForms路由

据我所知,我们可以使用MapRoute和MapPageRoute在asp.net mvc中进行路由。 我使用MapRoute进行路由,但效果不佳。 如果我删除第一条路线,那么第二条路线运行良好,我希望同时使用它们。 我是否想做不可能的事? 还是只是错过了难题? 我的Global.a