Asp.net 我想将MVC添加到Web表单项目中(在VisualStudio2019中)

Asp.net 我想将MVC添加到Web表单项目中(在VisualStudio2019中),asp.net,.net,asp.net-mvc,webforms,Asp.net,.net,Asp.net Mvc,Webforms,我们有很多网页,我们不想把它们全部移植到MVC中,所以我们决定将新的网页开发到MVC中 我想将MVC添加到我现有的Web表单项目中。有人能提供有关如何执行此操作的更多信息吗 如何在新的MVC视图中使用Web表单母版页 有可用的解决方案,但我正在寻找Visual studio 2019的解决方案(因为在vs 2019中更改了设置) 最简单的开始方法是安装Microsoft.AspNet.Mvc nuget软件包 创建一个区域,然后开始在该区域中构建控制器。一切都会像在普通MVC应用程序中一样正常工

我们有很多网页,我们不想把它们全部移植到MVC中,所以我们决定将新的网页开发到MVC中

我想将MVC添加到我现有的Web表单项目中。有人能提供有关如何执行此操作的更多信息吗

如何在新的MVC视图中使用Web表单母版页


有可用的解决方案,但我正在寻找Visual studio 2019的解决方案(因为在vs 2019中更改了设置)

最简单的开始方法是安装Microsoft.AspNet.Mvc nuget软件包

创建一个区域,然后开始在该区域中构建控制器。一切都会像在普通MVC应用程序中一样正常工作

也可以不使用区域。为此,需要创建route.config类。下面是它可能的样子。注意告诉它避免.aspx文件的那一行

 public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {              
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");  

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
然后从Global.asax调用RegisterRoutes方法。它看起来像这样

protected void Application_Start(object sender, EventArgs e)
{
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
   //other application_start code
}
如果你想开始使用MVC提供的一些好东西,比如依赖注入,你需要创建一个启动文件。我相信要创建启动文件,您需要nuget软件包Microsoft.Owin和Microsoft.Owin.Host.SystemWeb。将启动文件添加到与任何mvc应用程序相同的位置,它将按预期工作

在mvc布局中使用web窗体母版页非常困难。我发现,将所需的代码放入各种html帮助程序中效果很好。然后可以从web窗体母版页和mvc布局页访问这些内容。这里有一个例子

namespace MyHelpers
{
    public static class MyMasterPageNavigationHelper
    {
        public static MvcHtmlString GetNav(this HtmlHelper htmlHelper)
        {    
            return MvcHtmlString(GetNavigation());
        }


        public static string GetNavigation()
        {
            var a = new TagBuilder("a");
            a.Attributes.Add("href", "https://www.example.com");
            a.SetInnerText("example");    
            return a.ToString();    
         }    
    }
}
这是Mvc布局页面的名称

@using MyHelpers

@Html.GetNav()
这是您在webforms页面上对它的称呼

<%@ Import Namespace="MyHelpers" %>

<%= MyMasterPageNavigationHelper.GetNavigation() %>

在这两种情况下,html

<a href="https://example.com">example</a>

将被渲染。希望您能看到它是如何发展的,以实现您需要的母版页部分

以下是一些我发现对本主题有帮助的链接

这个


这个。如果母版页的回发中有代码,您可能会发现这很有用。

谢谢Dave。这有助于我在Visual2019的Web表单项目中添加MVC。现在,我将尝试母版页。嗨,Dave,还有其他方法可以将Web表单母版页传递到MVC视图吗。或者我必须创建与web表单母版页相同的新的_Layout.cshtml,并在MVC视图页面中使用这个_Layout.cshtml。我认为您需要使用_Layout.cshtml。这就是答案。它基本上说MVC不能处理viewstate。因此,我的建议是使用master for webforms、_layout.cshtml for mvc,并在可能的情况下使用master page和_layout.cshtml来共享html帮助程序,以避免重复。