【问题标题】:How to do routing with both WebForms and MVC in a VS2013 web project如何在 VS2013 Web 项目中同时使用 WebForms 和 MVC 进行路由
【发布时间】:2014-03-07 01:07:39
【问题描述】:

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

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 }
            );
        }
    }

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

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

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

我的项目面向 .NET 4.5.1。

【问题讨论】:

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


    【解决方案1】:

    您可以使用 WebForms 代码中的 Response.Redirect 和正确的 URL,该 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,您就会得到正确的路线。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-08
      • 1970-01-01
      • 2012-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-02
      • 2016-01-06
      相关资源
      最近更新 更多