何时使用ASP.NET MVC与ASP.NET Web窗体?

时间:2009-07-17 15:51:25

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

关于ASP.NET MVC的一个常见问题是为什么要在ASP.NET Web Forms上使用它?答案通常包括ViewState和干净的URL等。最后,您会发现使用正确的工具来完成工作,并且它们可以用于不同的目的。但是,我不相信我曾经见过这些目的是什么。那么,您何时会在ASP.NET Web窗体上选择ASP.NET MVC,或者在ASP.NET MVC上选择ASP.NET Web窗体?

6 个答案:

答案 0 :(得分:29)

你没有在ASP.Net上选择ASP.Net MVC,因为ASP.Net MVC 仍然是 ASP.Net。你选择ASP.Net MVC或ASP.Net Web Forms,有很多很好的理由:

  • 更容易控制您的HTML
  • 更容易进行单元测试
  • 很少有“陷阱”

另一方面,Web Forms确实有一些有利于他们的观点:

  • 非常快速地将简单的CRUD /商业应用程序放在一起
  • 在本地LAN环境中难以击败ViewState性能
  • 易于学习的形式范例

结果是,如果您在企业局域网环境中构建业务应用程序(实际上仍然是大多数Web开发人员),Web窗体真的很棒。从这个意义上说,微软真的了解自己的市但是,如果您正在为公共互联网构建应用程序,您可能需要MVC,以便您可以彻底测试并确保您的页面不会因不必要的ViewState或JavaScript数据而膨胀。

此外,在过去几年中发生了变化的事情是,即使是许多企业内部网应用程序现在也需要支持家庭/远程使用,这使得MVC对人群的吸引力比以往更大。

答案 1 :(得分:10)

如果您的所有团队成员都足够熟练地管理"控制HTML",请使用MVC,否则您的代码将变为tag soup

换句话说

bool useMvc = true;
foreach (TeamMember member in team.Members)
{
    useMvc = useMvc && member.IsSkilled;
} 

答案 2 :(得分:4)

答案 3 :(得分:4)

我会给你一些目的,有明显的优势。

  • 如果您的目的是面向公众的网站,将使用MVC。它是搜索引擎优化的最佳选择。

  • 如果您的目的是一个像桌面应用程序一样的企业Web应用程序,我会倾向于Web表单,因为如果正确使用,状态管理以及将资源划分为底层服务器控件会带来巨大的优势。 p>

答案 4 :(得分:3)

开发人员面临的最大问题是管理复杂性并保持代码“干净”。 MVC为开发人员提供了利用OOP来控制复杂性并使代码易于实现的缰绳。

Webforms在短期内发展得更快,但在维护和增长方面不具备长期可持续性。

答案 5 :(得分:1)

我已经使用Web表单13年了,MVC已经工作了2年,当我开始使用MVC时,我遇到了类似的问题。这是我的要点。

  • 最重要的是:ASP.NET的最新版本是4.6,他们正在转向ASP.NET 5.0,但MS放弃了ASP.NET Core,后者不再支持Web Forms(甚至VB.NET)。所以,在决定兔子洞的位置时,仅此一点就可以给你答案。

话虽如此:

  • MVC我发现,一旦掌握了它,就可以更轻松地处理基本形式和任何类型的简单“模型”,即具有非常简单,直接的关系的表格例如具有链接到用户,产品等的表的订单。一旦开始进入一些更复杂的关系并需要返回大量条件结果集,依赖参数,具有复杂的存储过程...然后Web Forms是处理这个问题要好得多。如果你不必处理这种复杂程度,MVC会使开发变得更快,特别是在处理已经拥有数据库的方法时,因为它已经为你创建了大量的代码和验证

  • 如果您对数据库设计不是很有经验,MVC会为您完成工作。它可以为您构建数据库。

  • MVC没有很多Web窗体所做的内置控件(Gridviews,FormViews,Sitemaps,Paged列表)。一切都必须从头开始编写,但幸运的是很多人已经在NuGet中为您发明了这些东西,您可以将其下载到您的项目中

  • MVC在很大程度上依赖于您的网址结构。路径,查询字符串等。如果您发现您的应用程序需要执行大量的表单POST而不是GET-ting,那么您将不得不进行大量的调整或AJAX发布。如果您有一个无法更改的设置URL,则可能很痛苦。它是可行的,但只是一点点的琐事(或者你只能使用Angular)。

  • MVC没有Viewstate。如果你需要隐藏从帖子到帖子的变量并坚持它们,那就有点难了。 MVC有像ViewBag这样的东西,它允许您将数据从控制器传递到您的页面,但在呈现页面后它会清除。还有一种称为“Tempdata”的东西,它的作用类似于Session状态,但更为临时。但是,它依赖于会话状态,这不是持久化数据的理想方式。会话变量和tempdata变量适用于用户级数据(登录人员的配置文件信息),但同一用户打开两个不同的选项卡可能会导致这些会话/ tempdata变量在您处理时遇到彼此覆盖实际模型数据。

如果你处于十字路口,我会选择MVC。 MS正在推动它,对Web Forms的支持可能会开始消失