可以在当前使用ASP .NET的Web应用程序中使用MVC框架吗?

时间:2012-10-09 19:59:25

标签: asp.net-mvc asp-classic

我最近加入了一个管理Classic ASP Web应用程序的小组。它一直很好地满足了我们团队的需求。但是,在我加入之前,我决定转向ASP .Net。由于我们主要是ASP开发人员,因此我们在ASP .Net中编写代码,就像在Classic ASP中一样(大多数情况下)。是否有可能将MVC引入此应用程序/项目?

谢谢!

4 个答案:

答案 0 :(得分:2)

简短的回答是肯定的。

Scott Hanselman之前写过关于this topic的文章。

根据团队技能的不同,您可能会发现难以加快速度 - 可以在Classic ASP中编写干净的MVC样式代码,但大多数人都没有。

答案 1 :(得分:2)

是的,可以在传统的WebForms项目中使用MVC。几年前我将一个大型WebForms项目迁移到MVC 2,这是我的发现(我已将它们更新为反映MVC 3)

  1. 确保安装了.NET 4.0,以及MVC 3框架和VS扩展。
  2. 创建一个新的空白MVC项目以用作参考。
  3. 查看参考项目的默认web.config。您基本上想要使用参考web.config,并从当前项目中合并您需要的东西。
  4. 查看参考global.asax.cs。与上面类似,您希望将引用.cs中的更改合并到当前应用程序的global.asax.cs中。
  5. 您需要将以下引用添加到您的Web项目中:

    System.Web.Abstractions,    System.Web.Extensions程序,    System.Web.Helpers,    System.Web.Mvc,    System.Web.Routing

  6. 您可以通过更改ProjectTypeGuids启用VS扩展:

    • 在“解决方案资源管理器”中,右键单击项目名称,然后选择“卸载项目”。然后再次右键单击项目名称并选择Edit ProjectName.csproj。
    • 找到ProjectTypeGuids元素并添加{E53F8FEA-EAE0-44A6-8774-FFD645390401}。
    • 保存更改,右键单击项目,然后选择“重新加载项目”。
  7. 为MVC内容添加以下标准文件夹:

    • 〜/浏览次数
    • 〜/查看/共享
    • 〜/控制器
    • 〜/ Models(适用于您的视图模型,可选)
    • 〜/ Content(适用于CSS和图片,可选)
    • 〜/ Scripts(适用于JS,可选)
  8. 附加说明:

    1. 如果您的现有WebForms依赖web.config设置进行授权(例如阻止未经授权的用户),则MVC操作将无法识别此操作,因为路由与WebForms授权完全分开。使用AuthorizeAttribute要求授权,或将操作约束到某些角色或用户。您甚至可以specify global filters,因此您不必在每个控制器或操作上应用此属性。
    2. 对于使用7之前的IIS版本或使用Classic管道的应用程序池,可能还有其他注意事项。考虑使用带有集成管道的IIS 7+。
    3. 我上面的笔记主要涉及获取MVC工作的基线,它使用ASPX视图。 ASPX视图使用与您在WebForms中使用的ASPX文件相同的标记。您还可以使用新的Razor语法(primer),我强烈推荐。您可以同时使用ASPX和Razor视图页面。但是,您不能在Razor视图上使用ASPX母版页(反之亦然)。此外,MVC将在Razor视图之前查找并使用ASPX视图,因此如果您将视图升级到Razor,请删除原始ASPX。您需要做一些额外的工作来启用Razor视图。我正在尝试找到启用Razor的笔记。我找到它们时会更新。一旦安装了Razor并运行,您可以使用this tool by Telerik将ASPX转换为Razor。
    4. Here is a question关于我在升级时遇到的问题。我只提供它,因为它涵盖了我上面提到的一些更详细的要点。但是,我当时正在升级到MVC 2,所以有些东西已经过时了。

答案 2 :(得分:1)

当然技术上可行。然而,听起来这可能是一种文化冲击,因为MVC与Classic ASP或ASP.NET WebForms的工作方式完全不同。我认为这样做是值得的 - 或者只是坚持使用ASP.NET WebForms,如果这看起来更自然。但是如果你还没有完全致力于WebForms,那么MVC似乎也很容易转移到IMO。

答案 3 :(得分:1)

是。我参与了一个以普通ASP.NET开始的项目,后来添加了一些ASP.NET MVC页面。最终我们更喜欢MVC,最终我们将所有WebForms页面迁移到使用MVC。但总的来说,这两个系统一起工作得非常好。

这是我记得的唯一真正的问题:WebForms的工作原理是将整个页面包含在一个大的<form>标记中。由于HTML不允许嵌套<form>标记,因此通常无法在WebForms页面中使用MVC表单。将WebForms页面与MVC内容分开,避免在可能出现在WebForms页面上的MVC内容中使用HTML表单,或者使用弹出对话框来创建在WebForms DOM区域之外创建的表单。