【问题标题】:Migrating from ASP.NET WebForms to MVC [closed]从 ASP.NET WebForms 迁移到 MVC [关闭]
【发布时间】:2011-12-15 15:54:20
【问题描述】:

我阅读了大量的问题和文章,指出从 ASP.NET Webforms 转换为 MVC 几乎是不可能的。但是我认为我的情况不同。

大约一年前,我愚蠢地在 Webforms 中开始了一个项目,但我采用的方法(据我了解)非常类似于 MVC。我禁用了表单验证,不使用任何回发,使用 URL 重写,所有页面更改都是加载 ContentPlaceHolders 页面内容的 AJAX 请求(使用一个小技巧,覆盖 RenderControl 方法)。我还在网站中引用的单独项目中使用了自己的 ORM 和 RESTful Service API。

现在系统运行良好,页面部分刷新正常,并且在进行 ajax 调用时更改了 url,所以当页面刷新时,它看起来完全一样。

现在我刚刚被告知我需要为一个新的大项目学习 MVC(但我必须先完成另一个项目),但我已经阅读了一些关于该主题的内容并启动了一些 Hello World 应用程序,而且似乎 ASP.NET MVC 的想法和我已经创建的差不多。

StackOverflow 是否仍然建议不要将 Webforms 应用程序转换为 MVC?除了最佳实践之外,转换为 MVC 还有其他好处吗?

【问题讨论】:

  • 你当然可以将WebForms“转换”为MVC,但是这个过程会涉及到大量的复​​制/粘贴/重写。
  • 在我看来,“除了最佳实践之外,转换为 MVC 还有其他好处吗?”是这个问题其余部分的另一罐豆子。
  • 如果效果很好,请不要重写。
  • @Erix - 很多“经验丰富”的程序员都使用这个概念,我坚信这是错误的态度。如果我写了一些糟糕的代码来快速工作,然后它会扩展,然后我可能会让我或其他开发人员处理相同的代码,如果我重新-按照一定的标准去做。

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


【解决方案1】:

我有一个非常大且旧的 ASP.NET WebForms 应用程序(它最初是为 .NET 1.1 编写的!)并启用了 MVC 在其中并排工作。我一直在使用 MVC 编写新功能,并将旧的 WebForms 功能转换为 MVC 控制器和视图。

我遇到了一些关于 URL 授权和在 IIS 集成模式下运行的小问题,但是一旦我了解了这些问题,它们就很容易解决。几乎不可能?当然不是!

我无法告诉您是否值得您花时间进行转换,因为我不知道您的应用程序的大小、范围或性质,或任何业务限制。然而,迁移到 MVC 对简化开发和质量来说是一个相当大的好处(因为它更容易划分和单元测试)。更不用说,我在 MVC 中编写(或重写)的功能比 WebForms 等价物更简洁、更快且响应迅速。

我很高兴将其从 MVC v2 移至 v3,并转换为 Razor 视图。我也会?如果我是你,如果我有时间,我会去做。

这是我发布的一个问题,它概述了转换过程以及我在转换过程中遇到的更重要的问题之一。 Migrating legacy ASP.NET to MVC 2 (RC): HttpApplication events not firing, User principal is null

【讨论】:

  • 这个项目是个人项目,网络比较大,是我职业生涯最大的学习曲线。我在工作中学到的一切,我已经回家并实施甚至重新设计了这个项目以变得更好。时间不是问题,因为没有最后期限,我也没有得到报酬。有一件事(一次!)似乎在这里使我受益的是我倾向于重新编写轮子 - 所以我使用我自己的 ORM(这将是模型?),UserControls(视图和控制器?),登录/注册框架,RESTful API 框架。
  • 我认为你会喜欢使用 MVC。这是严重的爆炸。我从一开始就讨厌 WebForms(但喜欢 ASP.NET 的架构),我觉得你在“重新发明轮子”的事情上。
【解决方案2】:

我最近将一个中等规模的项目从 WebForms 转换为 MVC。我不建议在您的第一个 MVC 项目中这样做,但是一旦您掌握了窍门,就真的没有什么能阻止您(逐渐)将 WebForms 应用程序转换为 MVC。

我注意到的主要好处之一是速度。通过抛弃视图状态、数据绑定和 Web 控件的怪异,您最终会得到一个更快的应用程序。

当然还有众所周知的好处,例如可测试性和对生成的 html 的完全控制。

WebForms 和 MVC 共享相同的基本 ASP.NET 平台,因此它们实际上并不像您所读到的那样不兼容。

【讨论】:

  • 对生成的 HTML 的完全用户控制会很好。我厌倦了在我的用户控件中添加override string ClientID { get { return ID; } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2014-03-15
  • 1970-01-01
  • 2015-08-08
  • 2012-07-25
相关资源
最近更新 更多