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

时间:2014-02-09 20:37:51

标签: asp.net-mvc webforms asp.net-mvc-routing visual-studio-2013

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

public class TestAreaRegistration : AreaRegistration 
    {
        public override string AreaName 
        {
            get 
            {
                return "Test";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context) 
        {
            context.MapRoute(
                "Test_default",
                "Test/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

在“测试”区域的Controller文件夹中,我创建了一个带有索引操作方法的HomeController - 以及相应的视图“Index.cshtml”。

当我运行应用程序时,它默认打开WebFomrms的Default.aspx页面。如果我通过http://localhost:1234/WebAppName/Home/Index打开应用程序,它将打开Index.cshtml视图。到目前为止,我喜欢这一切。

如何在此新应用中进行路由以在webform和MVC视图之间导航。例如,我的WebForm主页有一个左侧导航栏,我可以链接到一些WebForm页面,用户可以毫无问题地导航到这些页面。如何将MVC视图的链接添加到此WebForm左侧导航栏,以便用户可以在webform页面和MVC视图之间来回导航。

我的项目针对的是.NET 4.5.1。

1 个答案:

答案 0 :(得分:0)

您可以使用WebForms代码中的Response.Redirect和正确的URL路由到您的控制器,我想您的情况就是:

Response.Redirect("/Home/Index");

或者甚至更好的是你可以为处理你的路由的HtmlHelper做一个扩展方法:

    public static class ExtensionMethods
    {
        public static MvcHtmlString WebFormActionLink(this HtmlHelper htmlHelper, string linkText, string ruoteName, object routeValues)
        {
            var helper = new UrlHelper(htmlHelper.ViewContext.RequestContext);

            var anchor = new TagBuilder("a");
            anchor.Attributes["href"] = helper.RouteUrl(routeName, routeValues);
            anchor.SetInnerText(linkText);
            return MvcHtmlString.Create(anchor.ToString());
        }
    }

你的路线:

public static void RegisterRoutes(RouteCollection routes)
{

    routes.MapPageRoute(
          "Webforms-Route", // Route name
          // put your webforms routing here
         );

        routes.MapRoute(
            "MVC-Route", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
            );
    }

然后,您只需将路线传递给HtmlHelper即可获得正确的路线。