WebForms和MVC能够在同一个项目中共存吗?

9

我更喜欢做MVC,因为常规的WebForms开发让我感到很痛苦。

然而,我被分配了一个相当大的WebForms项目来添加一些功能。

有没有办法让WebForms和ASP.NET MVC在同一个项目中共存,甚至共同处理网站?我知道我在寻求一种hack方法。

6个回答

9
请确认你的项目是针对.NET 3.5的。添加参考(并确保它们复制到本地)MVC的大三组件(System.Web.Mvc、.Abstractions、.Routing)。如果您的项目中没有Global.asax,请添加一个。转到Global.asax代码后面,添加必要的代码,使其看起来就像MVC Global.asax一样。创建“Controllers”和“Views”的顶级文件夹。为相应的控制器创建子文件夹(例如,“Views”- > Home)。当您将.aspx文件添加到视图文件夹时,请确保将基类从System.Web.UI更改为System.Web.ViewPage并移除< form>标记。启动新的空白MVC项目,查找web.config中的“UrlRoutingModule”,并在WebForms web.config中的相同位置添加这些引用。检查新MVC项目的system.web -> pages-> namespaces节点,并将MVC特定节点添加到WebForms web.config中。总之,跟随新的/空白的MVC项目,并在web.config中添加必要的条目,引用必要的程序集,并为mvc模式创建正确的文件结构。

还需要一件事才能使其正常工作。请参阅此问题的已接受答案:https://dev59.com/d0rSa4cB1Zd3GeqPVEp- - AngryHacker

2

是的,它已经超过2年了,并且使用预览版完成。如果有人能够确认这是否适用于1.0版本,那就太好了。 - AngryHacker

1

我是如何将MVC5添加到现有的Web Forms项目中的:

  1. 创建一个新的ASP.NET MVC项目。您可以使用它来将信息复制到您的现有项目中。

  2. 在您现有的项目中,使用nuget添加引用。这也将更新您的Web.config并添加jQuery文件。将此复制到您的Package Manager Console中。

    Install-Package -Id "Microsoft.AspNet.Mvc" -Version 5.2.2" -ProjectName ExistingWebApp      
    Install-Package -Id "jQuery" -Version "1.10.2" -ProjectName ExistingWebApp
    Install-Package -Id "jQuery.Validation" -Version "1.11.1" -ProjectName ExistingWebApp
    Install-Package -Id "Microsoft.AspNet.Web.Optimization" -Version "1.1.3" -ProjectName ExistingWebApp
    Install-Package -Id "Microsoft.jQuery.Unobtrusive.Validation" -Version "3.2.2" -ProjectName ExistingWebApp
    Install-Package -Id "Modernizr" -Version "2.6.2" -ProjectName ExistingWebApp
  1. Copy BundleConfig, Routeconfig, FilterConfig and any others you need to App_Start

  2. Add the register lines from Application_Start to Global.asax. You can get them from your new project.

  3. Add these keys to the <appsettings> of your Web.config

    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    
  4. Add a reference to the Microsoft.CSharp assembly

  5. Add the Views and Controllers folder

  6. Now you can start adding views and controllers as you would do in any Mvc project


0

如果你还有空间读一本书,我强烈推荐 Steve Sanderson 的书 http://bit.ly/1W03Tv(我不是卧底...这本书真的帮了我很多)。他在书中有一个关于"结合MVC和WebForms"的章节。

我想在这里总结这个过程,但它有点冗长。如果你有机会,请去看看。


0

现在已经是2011年了,我们有.NET 4.0,将它们结合起来相当容易。只需启动一个新的MVC3项目,添加HomeController和视图(例如Home/Index.cshtml),然后添加一个新文件夹,比如说/Admin,然后在其中添加一个Web表单,如/Admin/Default.aspx...就这样,运行它,主页将使用MVC,管理部分将使用Web表单。


我尝试创建一个干净的MVC 3 .Net 4.0项目,并添加了一个名为“foo”的文件夹和一个default.aspx页面。我以调试模式运行,然后导航到/foo和/foo/default.aspx,但收到“找不到资源”的错误。我还缺少什么? - Jeff LaFay
你是否有主MVC项目的控制器及其相关视图?Foo文件夹必须仅包含.aspx(和.aspx.cs)文件,并且这些文件必须是从选择“新建Web表单”项创建的。 - Nestor

-1
此外,为了添加上下文菜单,请将“MVC”项目类型({E53F8FEA-EAE0-44A6-8774-FFD645390401})添加到项目文件中,如下所示。
<ProjectTypeGuids>{E53F8FEA-EAE0-44A6-8774-FFD645390401};{...};{...}</ProjectTypeGuids>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接