【问题标题】:How to enable MVC in a WebForms project?如何在 WebForms 项目中启用 MVC?
【发布时间】:2014-12-18 18:29:42
【问题描述】:

我有一个现有的网络表单项目。我从 Nuget 添加了 MVC5,并添加了以下内容:

_Viewstart.cshtml
Shared
   _Layout.cshtml
Areas
   Test
      Controllers
        TestController.cs
      Views
        Test.cshtml

我的控制器:

     public class TestController : Controller
    {
    [Route("Test/Test")]
    public ActionResult Test()
    {
        return View();
    }
    }

我的Global.asax

        AreaRegistration.RegisterAllAreas();
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        RouteConfig.RegisterRoutes(RouteTable.Routes); 

然而,当我导航到 /Test/Test 时,我得到 404 not found。我错过了什么?

更新 我最终基于模板化的 MVC5 项目在我的 web.config 中添加了一些东西,现在我已经点击了控制器方法并定位了视图。我现在正在处理其他事情,但我相信它与 MVC 配置无关,所以我认为它真的“那么简单”。

【问题讨论】:

  • 我很确定 MVC 项目可以提供 WebForms 页面,但反过来不行。如果我错了,朝我的脸开枪。
  • 这里有很多关于转换和集成的好信息:rachelappel.com/integrating-aspnet-web-forms-and-aspnetmvc
  • MVC 不仅仅是安装 nuget 包。您还必须安装 Razor、路由和一堆其他东西。最重要的是,您需要进行大量 web.config 更改。您可以从 roger 的消息开始,但这是针对 MVC4 而不是 MVC5,所以请记住这一点。
  • @BrianDriscoll 你错了。作为One ASP.NET 的一部分,每个Web 应用程序项目都是简单的ASP.NET,您可以在一个项目中混合和匹配Web 表单、MVC、Web API、SignalR。仅当您在“新建项目”对话框中使用组合项目模板而不是 VS 2012 模板时,这可能才是正确的(但我不确定)。
  • @SB2055 - 说“我解决了我的问题”而不解释你是如何解决的,这是非常糟糕的礼仪。 Stack Overflow 的意义在于,您的问题和答案不仅可以帮助您,还可以帮助可能遇到相同问题的其他人,而您却拒绝为他们提供解决方案。

标签: c# asp.net asp.net-mvc webforms


【解决方案1】:

查看默认的 MVC5 web.config 后,将以下内容添加到我的配置中让我启动并运行:

    <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

还有:

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.2.2.0" newVersion="5.2.2.0" />
  </dependentAssembly>

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      如果您使用的是 MVC5,我最好的建议是创建一个全新的项目。在 ASP.NET 4.5 和 MVC5 中,他们将这些技术组合成他们所谓的 One ASP.NET。这使某些事情变得更容易。

      创建一个新的 ASP.NET WebForms 应用程序,然后选中 MVC 复选框,如果您还需要 WebApi,可能还选中 WebApi 复选框(如果不需要,则不要)。

      然后将您现有的所有网络表单代码从旧项目复制到新项目。按照这个演练。

      https://docs.microsoft.com/en-us/aspnet/visual-studio/overview/2013/one-aspnet-integrating-aspnet-web-forms-mvc-and-web-api

      如果由于某种原因您无法以这种方式执行此操作,那么一个更复杂的过程是创建新项目,然后将其与您现有的项目进行比较并找出您需要哪些 web.config 条目(请注意请注意 Views 文件夹中还有一个 web.config),以及需要安装哪些 nuget 包。不过我强烈建议第一种方法,因为第二种方法涉及更多。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2018-09-12
      • 2014-12-22
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 2011-05-24
      • 1970-01-01
      相关资源
      最近更新 更多