使用ASP.Net MVC与Web表单的最大优势


164

与另一种相比,使用一种有什么优点?

Answers:


165

ASP.net MVC的主要优点是:

  1. 启用对呈现的HTML的完全控制。

  2. 提供关注点的清晰分离(SoC)。

  3. 启用测试驱动开发(TDD)

  4. 与JavaScript框架轻松集成。

  5. 遵循网络无状态性质的设计。

  6. 启用S​​EO的RESTful网址。

  7. 没有ViewState和PostBack事件

ASP.net Web窗体的主要优点是:

  1. 它提供RAD开发

  2. 适用于来自winform开发的开发人员的简易开发模型。


32
关于SoC,人们可以通过编写带有很多业务逻辑甚至数据访问代码的“胖”控制器,就像在Web窗体上一样使用它。因此,我想说SoC是编码器必须提供的东西,但是固件无法帮助您。
rodbv

7
@ rodbv:是的,但是MVC确实将您推向正确的方向,或者至少没有使您跳入篮筐。因此,也许这一点应该读为“使SoC易于实现”之类的内容
Erik van Brakel,2009年

4
与其他方法相比,它如何“启用测试驱动开发”?我还感到困惑的是,自.NET 2.0开始出现HttpContext.RewritePath方法(字符串)时,它如何允许RESTful URL?
Mark Broadhurst 2010年

2
尽管这些要点对于MVC端来说大多是准确的,但现在很多都已集成到WebForms中。
rtpHarry 2011年

链接到这个答案有更详细的信息来源:weblogs.asp.net/shijuvarghese/archive/2008/07/09/...
DK。

91

ASP.NET Web窗体和MVC是Microsoft开发的两个Web框架-它们都是不错的选择。这两个Web框架都不能被另一个替代,也没有计划将它们“合并”为一个框架。Microsoft会同时进行持续的支持和开发,而且两者都不会“消失”。

这些Web框架中的每一个都有优点/缺点-开发Web应用程序时需要考虑其中的一些优点/缺点。可以使用任何一种技术来开发Web应用程序-它可能使针对特定应用程序的开发更容易选择一项技术,而选择另一项则相反。

ASP.NET Web表单:

  • 开发支持状态 •与Windows应用程序类似,给人一种Web应用程序意识到用户正在做什么的错觉。即使“向导”功能更易于实现。Web表单在将大量复杂性隐藏给开发人员方面做得很好。
  • 快速应用程序开发(RAD) •能够“跳入”并开始交付Web表单的功能。一些MVC社区对此有争议,但由Microsoft提出。最后,它取决于开发人员的专业知识水平以及他们的满意程度。Web表单模型对于经验不足的开发人员而言,学习曲线可能较少。
  • 更大的控制工具箱 •ASP.NET Web窗体提供了更大,更健壮的工具箱(Web控件),而MVC提供了更原始的控件集,它通过jQuery(Javascript)更多地依赖于丰富的客户端控件。
  • 成熟 •自2002年以来已经存在,并且存在大量有关问题,问题等的信息。提供更多的第三方控制-需要考虑您现有的工具箱。

ASP.NET MVC:

  • 关注点分离(SoC) •从技术角度来看,MVC中的代码组织非常干净,井井有条,并且使Web应用程序更容易(希望如此)扩展功能。从开发的角度促进出色的设计。
  • 与客户端工具(功能丰富的用户界面工具)的集成更加轻松 •与以往相比,Web应用程序变得越来越丰富,就像您在台式机上看到的应用程序一样。与Web窗体相比,借助MVC,它使您能够更轻松,更无缝地与此类工具包(例如jQuery)集成。
  • 搜索引擎优化(SEO)友好/无状态 •URL对搜索引擎更友好(即mywebapplication.com/users/ 1-检索ID为1的用户与mywebapplication / users / getuser.aspx(在会话中传递的ID))。同样,由于MVC是无状态的,因此消除了从同一窗口生成多个Web浏览器的用户的麻烦(会话冲突)。同样,MVC遵循无状态Web协议,而不是与其对抗。
  • 与需要高度控制的开发人员很好地配合工作 •ASP.NET Web表单中的许多控件会自动生成呈现页面时看到的许多原始HTML。这可能会使开发人员头痛。借助MVC,它可以更好地实现对渲染内容的完全控制,并且没有任何惊喜。更为重要的是,HTML表单通常比Web表单小得多,Web表单可以等同于提高性能-需要认真考虑。
  • 测试驱动开发(TDD) •使用MVC,您可以更轻松地为Web事物创建测试。额外的测试层将提供另一层防御意外行为的能力。

身份验证,授权,配置,编译和部署都是这两个Web框架之间共享的所有功能。


27
“有了MVC,您就可以完全控制呈现的内容”-如果您使用文字而不是标签,使用占位符而不是面板,使用Repeaters而不是Datagrids等,也可以使用WebForms来完全控制。相信这是真的。Downvote ..
masty 2011年

3
@masty-我不知道我个人会否决票,但我同意你所说的其余内容。
彼得

4
@masty-感谢您通过挑剔并要求降低这个问题来拯救StackOverflow世界。我只是为您编辑了答案-希望我能与您要求弃权的其他人一起让您投票。谢谢!
JC

6
@masty我部分同意,但是当使用文字,占位符和中继器时,您将越来越多的html移到后面的代码中。这也会使设计人员阅读.aspx以及编码人员阅读.aspx.cs时产生混乱。所以可以,但是可以,但是它也违反了ASP.Net WebForms的目的。我想说,在这种情况下,ControlAdapters是一种更干净的解决方案。您无需替换控件,而是替换它们的呈现方式。
2011年

2
语句“使用MVC,您可以完全控制呈现的内容”感到困惑。我认为更好的说法是:“ MVC框架执行的呈现较少,呈现的内容更精简。您可以对呈现的特定HTML / CSS拥有更多的控制权,但是您必须做一些工作才能获得该控制权。”
金丹戈

17

年龄足够大,可以记住经典ASP的人都会记住,打开一个将代码与html和javascript混合在一起的页面的噩梦-即使是最小的页面,也很难弄清楚它在做什么。我可能是错的,我希望自己是错的,但是MVC看起来就像回到了那些糟糕的过去。

当ASP.Net出现时,它就被誉为救世主,将代码与内容分离开来,并允许我们让Web设计人员创建html,并由编码人员处理背后的代码。如果我们不想使用ViewState,则将其关闭。如果由于某种原因我们不想使用代码,可以像经典ASP一样将代码放在html内。如果我们不想使用PostBack,我们将重定向到另一个页面进行处理。如果我们不想使用ASP.Net控件,则使用标准的html控件。如果我们不想在控件上使用ASP.Net runat =“ server”,我们甚至可以询问Response对象。

现在,一个非常有才华的人(可能是从未编写过经典ASP的人)已经决定是时候回到将代码与内容混合在一起并称其为“关注点分离”的时代了。当然,您可以创建更简洁的html,但是经典ASP则可以。说“如果您的视图中有太多的代码,则说明您的编程不正确”,就像说“如果您使用经典的ASP编写结构良好且带有注释的代码,则它比ASP.NET干净得多,而且更好”

如果我想回到混合代码和内容的角度,我会考虑使用PHP进行开发,而PHP对于这种开发具有更为成熟的环境。如果ASP.NET有太多问题,那么为什么不解决这些问题呢?

最后但并非最不重要的一点是,新的Razor引擎意味着更难以区分html和代码。至少我们可以在ASP中查找打开和关闭标签,即<%和%>,但是现在唯一的指示将是@符号。

也许是时候改用PHP了,再等10年,以便有人再次将代码与内容分离。


7
+1点上。我对MVC的第一个反应是我又重新制作了Classic ASP。这次仅在C#中,而不是在VBScript中。
DancesWithBamboo 2011年

3
我很惊讶为什么这个答案获得了如此多的赞誉。首先,ASP.NET MVC具有内置的MVC分隔符。当然,您可以在ASP中执行此操作。其次,ASP.NET MVC不仅仅是经典的ASP。它提供了对HTML的细粒度控制,并结合了.NET的强大功能和许多有用的帮助程序。第三,@和<%%>一样,是一个很好的表示法。您的Razor视图的任何体面的编辑器都将支持@表示法。最后,PHP成熟了吗?me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design ASP.NET MVC是一个不错的平台。给它更多的关注。
太平绅士10 Berge 2012年

你在跟我开玩笑吗?我一直在使用PHP的“ <?...?>”符号,并且发现它非常冗长。我看不出“ @”符号比“ <%...%>”标签更难识别。另外,您很少在HTML模板中使用“ @”符号。
训ege

我的眼睛在剃刀页面上的表现确实比在“ <%%>”符号的地狱上更好。阅读.aspx页使我头疼。我也更喜欢看到正在渲染的内容。@foreach(..){<tr> ... </ tr>}块比<abc:MyViewControl ID =“ ...” runat =“ server” DatasourceID =“...。 ”。我做了很多客户端操作,我需要确切地知道将在哪里渲染什么,以及使用哪个id,样式和类。我宁愿自己做,也不愿让控制员即时进行。特别是当某些控件根据其设置呈现不同的呈现方式时。
Thanasis Ioannidis

我对此感到惊讶,这是对MVC框架的完全误解。如果您发现自己在MVC中将代码与内容混合在一起,则说明您做错了。您的视图包含内容,您的控制器(及其使用的类)具有代码。这是MVC的主要原则之一。
2013年

14

如果您正在与其他开发人员一起工作,例如PHP或JSP(并且我猜是在轨道上),那么您将在页面上进行转换或协作的时间要容易得多,因为您不会拥有所有这些“讨厌的” ASP.NET事件和控件无处不在。


“轻松得多的时间”使用哪个?
cregox

5
@cawas-使用MVC更加容易。ASP.NET MVC中没有事件。基本上,您使用的是标准HTML和CSS,而不是PHP / JSP开发人员需要学习的大量事件和控件
Simon_Weaver

ASP.NET是WebForms和MVC的基础。人们倾向于将WebForms与ASP.NET混淆。没有“ MVC vs ASP.NET”。有“ ASP.NET MVS”和“ ASP.NET WebForms”。实际上,他们并没有在互相搏斗。他们只是用不同的方式来建立网站的利与弊
Thanasis Ioannidis

13

MVC的问题在于,即使对于“专家”来说,它也会占用大量宝贵的时间,并且需要大量的精力。不管背后的技术是什么,企业都受“有效的快速解决方案”这一基本要素的驱动。WebForms是一种RAD技术,可以节省时间和金钱。任何需要更多时间的事情都是企业所不能接受的。


1
对于企业+1的基本动力是“有效的快速解决方案”
Dragos Durlut 2012年

1
问题是,某些快速解决方案由于一开始就打算快速解决而无法使用。最近的经验:快速的Webforms页面可以进行一些基本的create-edit-update。它应该比信息路径的Equiveland页面“更快”,后者有点慢。实际上,新解决方案与infopath页面几乎具有相同的性能,但在IE7中除外,因为它非常慢,直到无法使用为止。打开页面需要5秒钟,每次单击组合框都需要5秒钟...所有这些,只是因为它必须快速。没有思想,没有计划。
Thanasis Ioannidis 2013年

1
之后,我们最终删除了所有控件以摆脱它们繁琐且不必要的客户端脚本编写,并最终以自举数据和事件以及jQuery和BackBone.js的组合呈现了手动html控件。实际上,这是在Webforms页面中托管的MVC方法。当然,尽管规划得不错,但WebForms和MVC都可以很好地执行,但是WebForms诱使您仅将页面中的控件扔掉,只是看到屏幕上有东西在移动,然后花更多的时间对其进行调整(如果不删除它)。完全没有
Thanasis Ioannidis

11
  1. 正确的AJAX,例如JSONResults,不会出现部分页面回发废话。
  2. 无观看状态+1
  3. 不重命名HTML ID。
  4. 干净的HTML =不会出现膨胀,并且在渲染XHTML或符合标准的页面时表现不错。
  5. 不再生成AXD javascript。

9

对我来说,最大的单一优势是您的模型,视图和控制器层之间的明确分隔。它从一开始就有助于促进良好的设计。


4
我同意,如果您以前从未使用过这种类型的模式,这是一个主要卖点,但是您可以在WebForms中实现MVC或MVP模式。使人们转向模式而不是用数据集独占Web表单的荣誉,但它们却使我通常雇用的人不满意。
Mark Broadhurst 2010年

9

与ASP.Net相比,我没有看到MVC的任何优势。10年前,Microsoft提出了UIP(用户界面过程)作为MVC的答案。失败了。那时,我们使用UIP进行了一个大型项目(4个开发人员,2个设计师,1个测试人员),那真是一场噩梦。

不要为了炒作而跳入潮流。上面列出的所有优点都已在Asp.Net中提供(具有更大的调整[ Asp.Net 4中的新功能 [ Asp.Net 4中的新功能 ])。

如果您的开发团队或拥有Asp.Net的单个开发人员家庭只是坚持这样做,并迅速制作出精美的产品来满足您的客户(他们为您的工作时间付费)。MVC将消耗您宝贵的时间,并产生与Asp.Net相同的结果:-)


1
默认情况下禁用视图状态,同时使IT对偶尔出现的控制,实际上需要它是一个了不起的进步在ASP.NET 4
PeteT

WebForms和MVC都建立在ASP.NET之上。
Thanasis Ioannidis

8

弗朗西斯·沙纳汉(Francis Shanahan)

  1. 为什么将部分回发称为“废话”?这是Ajax的核心功能,在Atlas框架和Telerik等出色的第三方控件中得到了很好的利用。

  2. 我同意您关于viewstate的观点。但是,如果开发人员小心地禁用了viewstate,则可以大大减小呈现的HTML的大小,从而使页面变得轻巧。

  3. 只有HTML Server控件在ASP.NET Web窗体模型中被重命名,而不是纯HTML控件。不管是什么,您为什么如此担心是否重命名?我知道您想在客户端处理很多javascript事件,但是如果您聪明地设计网页,则可以肯定获得所需的所有ID。

  4. 甚至ASP.NET Web表单也符合XHTML标准,我认为没有任何膨胀。这不是为什么我们需要MVC模式的理由

  5. 同样,为什么还要为AXD Javascript烦恼?为什么会伤到你?这又不是有效的理由

到目前为止,我还是使用经典的ASP.NET Web表单开发应用程序的爱好者。例如:如果要绑定下拉列表或网格视图,则最多需要30分钟且最多不超过20行代码(当然是最少的)。但是在使用MVC的情况下,请与开发人员谈谈它的痛苦。

MVC的最大缺点是我们要回到ASP的时代。还记得将Server代码和HTML混合在一起的意大利面条代码吗???噢,天哪,请尝试阅读混合了javascript,HTML,JQuery,CSS,Server标签和其他内容的MVC aspx页面。任何人都可以回答这个问题?


6
部分回发是一件丑陋的事
UpTheCreek 2010年

3
如果您的视图中有很多代码,则说明您做错了什么。视图中的代码应仅涉及布局。
2010年

1
您看到带有javascript与css和html混合的页面的唯一原因是,如果您正在看一个懒惰的开发人员的工作,而他们又不想打扰单独的样式和脚本。这可以在Web表单和MVC中发生。我同意脚本标签很丑陋,但是有了MVC3,它们肯定不会再出现了,至少您可以看到正在发生的事情,而无需查看文件后面的代码并找到控件绑定了数据的地方……
jcvandan

另外,如果您使用MVC创建意大利面条代码,则说明您未遵循关注点分离原则,并且未使用好的架构模型
jcvandan 2011年

1
使用两者,我可以说没有什么比WebForms更混乱了。MVC是干净的,除了服务器标记外,但除此之外,所有混乱都是程序员不良的错。MVC是按内核设计的,以将逻辑与设计分开。您还提到了Telerik。Telerik for ASP.Net AJAX导致了如此混乱的代码。更不用说速度,(搅拌)排序telerik网格需要:ASP.Net WebForms中4页需要500毫秒,MVC中84页需要200毫秒。(使用他们的演示程序和chrome的Firebug进行了测试。)在性能和分离度方面,MVC绝对胜出。
2011年

6

Web表单还得益于成熟度的提高和第三方控制提供商(例如Telerik)的支持。


2
不是说它不能使用MVC来完成,因为我敢肯定它已经做到了,但是如果您想将一个又脏又臭的Intranet或Extranet应用程序与很多bling Telerik和WebForms一起拍打,这是很难击败的。坦白说,走了。
infocyde 2011年

Telerik也具有MVC控件(较少,并且具有较少的选项,但是尽管如此,它们仍然具有),并且它们比WebForm变体快很多。
2011年

5

在Web表单中,您还可以手动呈现几乎整个html,除了很少的诸如viewstate,eventvalidation之类的标签,可以使用PageAdapters删除它们。没有人会强迫您使用GridView或其他具有不良HTML呈现输出的服务器端控件。

我会说MVC的最大优势是速度!

接下来是强制分离关注点。但这并不禁止您将整个BL和DAL逻辑放入Controller / Action!这只是视图分离,也可以在Web表单中完成(例如MVP模式)。人们为mvc提到的许多事情都可以在Web表单中完成,但需要付出额外的努力。
主要区别在于请求来自控制器,而不是视图,并且这两层是分开的,而不是通过局部类(如Webforms)连接(aspx +代码后面)


您是指开发速度还是执行速度?
Jules

1
特别是在将Telerik与MVC结合使用时。从他们的演示中,对网格进行排序需要:4页(WebForms)500毫秒,84页(MVC)200毫秒。对我来说,MVC的偏好(即使我们在公司使用WebForms,但考虑到正在考虑进行转换)是因为它更干净,您拥有自己的视图,可以在其中调整输出,在模型中,在混乱的地方数据:P和您将其整合在一起的控制器
Aidiakapi 2011年

4

我的2美分:

  • ASP.net表单非常适合快速应用程序开发和快速增加业务价值。我仍然将其用于大多数Intranet应用程序。
  • MVC非常适合搜索引擎优化,因为您可以更大程度地控制URL和HTML
  • MVC通常会生成更精简的页面-没有视图状态且更清晰的HTML =快速加载时间
  • MVC易于缓存页面的某些部分。-MVC很有趣:-个人观点;-)

3

MVC使您在页面上拥有多个表单,我知道这是一个小功能,但是很方便!

我也认为MVC模式使代码更易于维护,尤其是。几个月后重新访问时。


2
ASP.NET Webforms允许您在页面上拥有任意数量的表单。的限制是只有一个可以有“RUNAT =” server”属性。
安德烈Rînea

1
@AndreiRinea我认为他的意思是:P,runat="server"当您仍然想使用Webforms时,在非表单标签中没有太多用处,并且由于您不能/不应该嵌套表单,我认为他的意思很明显:)
2011年

2

MVC控制器:

    [HttpGet]
    public ActionResult DetailList(ImportDetailSearchModel model)
    {
        Data.ImportDataAccess ida = new Data.ImportDataAccess();
        List<Data.ImportDetailData> data = ida.GetImportDetails(model.FileId, model.FailuresOnly);

        return PartialView("ImportSummaryDetailPartial", data);
    }

MVC视图:

<table class="sortable">
<thead>
    <tr><th>Unique Id</th><th class="left">Error Type</th><th class="left">Field</th><th class="left">Message</th><th class="left">State</th></tr>
</thead>
<tbody>
    @foreach (Data.ImportDetailData detail in Model)
    {
    <tr><th>@detail.UniqueID</th><th class="left">@detail.ErrorType</th><th class="left">@detail.FieldName</th><th class="left">@detail.Message</th><th class="left">@detail.ItemState</th></tr>
    }
</tbody></table>

那有多难?没有ViewState,没有BS Page的生命周期...仅是高效代码。


1

我可以看到较小站点的唯一两个优点是:6)启用SEO的RESTful URL。7)没有ViewState和PostBack事件(总体而言,性能更高)

对小型站点进行测试不是问题,无论如何,对站点进行正确的编码也不会带来设计优势,MVC在许多方面会混淆并且使更改更难进行。我仍在决定这些优势是否值得。

我可以清楚地看到MVC在大型的多开发人员站点中的优势。


1

我发现的主要好处是,它迫使项目进入了更具可测试性的结构。使用Web表单(MVP模式)也可以很容易地做到这一点,但是要求开发人员对此有一定的了解,但许多人没有。

Webforms和MVC都是可行的工具,两者在不同领域都表现出色。

在我们主要开发B2B / LOB应用程序时,我个人使用Web表单。但是我们总是使用MVP模式来做到这一点,因为我们可以在单元测试中实现95%以上的代码覆盖率。这也使我们能够自动测试webcontrols的属性。属性值通过视图公开,例如

bool IMyView.IsAdminSectionVisible{
       get{return pnlAdmin.Visible;}
       get{pnlAdmin.Visible=value;}
    }

)我认为在MVC中不容易达到这种测试水平,而不会污染我的模型。


0

您再也不用使用“非后置控件”了,并且弄清楚如何将它们拖入传统的asp.net环境中。

这意味着可以使用这种现代(免费使用)的javascript控件,例如thisthisthis,而无需试图将圆钉固定在方孔的感觉中。


0

使用MVC可以轻松处理现代javascript控件以及JSON请求。在那里,我们可以使用许多其他机制将数据从一个动作发布到另一个动作。这就是为什么我们更喜欢MVC而不是Web表单。我们也可以建立重量轻的页面。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.