ASP.NET MVC与WebForms:替换WebForms控件

9
我已经阅读了这里的几篇文章,所以我明白了关于优缺点的想法,特别是在MVC中拥有完全控制渲染的HTML代码等方面。
我的问题与UI控件有关:在MVC中,我将不得不自己编写所有UI控件(或其html等效物)。那么这不会非常困难吗?
ASP.NET的第三方供应商之所以存在,只是因为自己编写ASP.NET的UI控件非常困难,并且能够针对所有Web浏览器,而且我们最好集中精力在业务逻辑上,而不是花费大量时间自己编写UI控件HTML代码。
我知道这个功能让我们完全控制最终的HTML,但是自己完成这个UI部分是否不划算呢?如果自己编写它们很容易,那么这些第三方供应商为什么还存在呢?我们可以在WebForms时代做到这一切。
我确定我在这里遗漏了一些东西或者有些愚蠢,请告诉我具体缺少了什么关于我们自己编写UI部分的内容。
仅仅因为我们通过编写IL代码获得了对程序的完全控制,难道我们就去这样做吗?我们仍然使用C#等东西 - 所以“完全控制HTML”的理论 - 我并不认同这个想法。
请帮助我理解这个UI部分。其他事情我都明白,比如关注点分离、基于TDD的开发等等。但是为什么要自己编写所有的UI控件 - 这有点工作吧?

有人几秒钟前评论说我的帖子是重复的,我回复了这个评论,但那个人现在显然已经删除了他们的评论 :-) - SL3NewUser
@Arnis:迄今为止已经阅读并想回复您的评论:我真的很期待阅读答案,因为这正是我不理解的问题:如何编程,特别是如何在ASP.NET MVC中获取第三方组件。显然,必须有一个解决方案。所以OP的问题对我来说非常好! - Avi
@Avi 奇怪的是 - 你实际上并不需要超级聪明的“万能”组件。这是关于可重用性的永无止境的故事。一旦你熟练掌握了html+css+js,编写自己的东西比尝试理解如何重用和配置复杂的控制器要容易得多。如果你还没有学习过asp.net mvc,那就去学吧。 - Arnis Lapsa
@Arnis:好的,好的。不过我认为我也会很快学会Telerik控件。比如说我想使用一个日历或者编辑器(因为我肯定想在我要帮助儿子学习几何学的第一个网站上使用它们),如果没有控件,我该怎么做呢? - Avi
@Avi日历是一个很好的例子,当您需要重复使用现有内容时。我会选择轻量级JavaScript库。不知道您所说的“编辑器”是什么意思。 - Arnis Lapsa
显示剩余5条评论
12个回答

11

事实是:

如果你想精通 web 开发,你需要掌握 HTML + CSS + Javascript。

对于 WebForms,你必须学会 WebForms 的方式来完成它,但使用 MVC,你可以利用 .Net 的强大功能自由生成所需的 HTML + CSS + Javascript。


Eduardo,你在WebForms中生成HTML的能力也是一样的。 - user134706
6
ASP.NET 控件是透过隐藏一定的复杂性,让简单的应用程序变得容易,但是当您需要做更多超出它们提供的功能时,您将面临一个非常陡峭的学习曲线。 - user1228
这对于拖放式开发人员来说就像是一枚核武器。缺乏知识会导致关于标记混乱的问题,并回到经典ASP而不是不适当的技术。 - Arnis Lapsa

2

2
问题是,ASP.NET MVC比ASP.NET要年轻得多。许多年来,第三方公司一直在开发大量可重用的组件,我相信,在不久的将来,将有与ASP.NET相当的控件集可用于ASP.NET MVC。
如果您确实需要具有第三方控件的非常丰富的GUI,并且您无法在接受的时间内重写它们 - 请坚持使用asp.net。虽然在我看来,MVC给你提供了很多强大的功能,但花费更多的时间来重写控件可能不是明智的选择。如果您可以不使用控件并喜欢MVC概念,请使用MVC,您肯定会看到第三方解决方案,因为mvc扩展的市场正在增长(也许他们已经注意到了,我不知道)。

1

就我个人而言,我非常感激在MVC中不能使用ASP.NET控件。

正如许多人已经指出的那样,控件只是服务器端的代码块,代表您呈现HTML和JavaScript。像数据网格这样的东西很棒,直到有人要求您进行轻微修改,比如添加删除确认提示,然后似乎无法完成某些任务。

好消息是,有一些非常强大的jQuery工具可供使用。jQgrid是一个很好的网格替代品,它比ASP.NET网格功能更强大...

http://www.trirand.com/blog/

jsTree 是一个非常棒的树形视图控件。再次使用 jQuery....

http://www.jstree.com/

事实上,大多数使用 Razor、HTML、JavaScript 和 CSS 可以完成的任务都非常简单。它们如此简单,以至于有些愚蠢。

对于像我这样的 Web Forms 开发人员来说,理解 MVC 以及为什么应该使用它是很困难的,因为它太简单了。放弃传统 ASP.NET 的复杂性是很难的,但当你做到了,感觉真的很好。

不要混淆 Web Forms 和 MVC。虽然可以这样做,但你会后悔的。


1

我相信UI和用户体验对于Web应用程序的成功至关重要。使页面直观易用,最大程度地减少用户必须进行的导航量,并提供有效的反馈和互动,这些都可以成为用户想要使用的网站和他们避免使用的网站之间的区别。

如果您正在尝试在公共网站上吸引用户,则良好的外观和出色的可用性是建立重复访问的关键。

如果您正在编写一款由数百或数千名员工全天使用的内部应用程序 - 正如我所做的那样 - 使UI高效且易于使用确实对您的用户意义重大。

因此,我不会低估UI的重要性。它不是一个麻烦事。它是用户体验的关键组成部分。我建议Web开发人员应该采用任何能够完成工作的工具和策略。这通常意味着自己编写UI控件。或与喜欢做这部分工作的团队成员合作。


1

我最近使用ASP.NET + 手工编写的javascript将一个非常复杂的网站重构为MVC + jQuery。代码的复杂性减少了50%-75%,变得更易于测试。我用非常简单的HtmlHelper方法替换了所有我必须编写的复杂Web控件(需要克服陡峭的学习曲线)。

不要忘记,当您使用自定义Web控件时,控件开发人员会给您提供非常静态的UI。使用原始HTML,您可以利用整个Web行业开发的样式和UI。

增加了简单性,减少了开发时间,可测试性,UI的灵活性...我不想回去了。


2
如果控件是以静态UI的形式编写的,那么你将得到一个静态UI。"整个Web行业开发的样式和UI"没有理由不能封装在Web控件中。 - John Saunders
要理解我在说什么,只需看看ASP.NET控件如何呈现并排内容以及其他所有人如何做。由于控件作者固定了HTML,往往你会发现你不能轻松地使用常见的布局和样式;你必须努力工作(例如控件适配器)来适应与你的Web控件一起使用的样式。 - user1228
WebForms允许您创建可模板化的WebControl(假设您创建了ITemplate属性),从而使集成者能够编写所需的自定义HTML。开发人员可以构建非常复杂的Web控件集,而无需编写一行HTML。 - Manitra Andriamitondra
@Manitra 是谁编写了可模板化的 WebControl?需要多长时间?需要多少知识?在MVC中做类似的事情是微不足道的。也就是说,如果你能让别人为你编写它,你的编码时间会大大缩短。 - user1228

1
你还需要记住ASP.NET MVC只是第一个版本。我认为本质上没有任何理由阻止你创建类似于服务器控件的东西来完成某些任务 - 记住,有很多服务器控件不会生成任何标记(例如Repeater、PlaceHolder、ListView)。我认为这些类型的控件在未来的MVC设置中可能会很有用。

当然,只要不使用视图状态,您就始终可以制作/使用控件。但是,在大多数情况下,不就是这使它们具有价值和类似于Windows窗体的特点吗? - Arnis Lapsa

1

我相信ASP.net的出现是在许多开发人员仍然习惯于进行桌面应用程序并刚开始进行Web开发的时候。那个时候,通过控件和后台处理来抽象Web的细节是让人们入门的好方法。当时我们并不是要完善Web,我们只是想进入它!

现在Web已经成熟了,我们慢慢学习了HTML、CSS、JavaScript等知识,我们希望为自己的需求优化网站,而不想依赖ASP.net表单控件来控制网站的细节。

总之,我认为这是许多开发人员从桌面向Web自然演变的结果。


这是一个很好的观点。开发人员很重要,而不是他们使用的技术。 - Arnis Lapsa

0

嗯,我也在想如何在ASP.NET MVC中使用第三方控件。显然,与此处的某些答案相反,这是可能的。

自问题提出以来已经过去了很长时间,行业已经发展。因此,我搜索并找到(但尚未测试)解决方案,例如Telerik Extensions for ASP.NET MVC

我在这里发布这个答案主要是为了支持像我一样的其他MVC新手 - 只需Google

"asp.net mvc" controls


0

这里有一件我认为你忽略了的关键事情。当ASP.NET不再是微软的做事方式时...你最终将被迫转而做其他事情。我曾经编写过Perl、ASP Classic、ColdFusion、PHP、ASP.NET Web Forms、ASP.NET MVC...它们唯一共同点是底层数据库、设计模式、针对特定技术的最佳实践以及HTML、JavaScript、CSS和Photoshop。

没有人要求你学习MVC。没有人告诉你不要使用WebForms。然而,抱怨必须编写原始UI不会让你在这个行业中走得太远。你应该每天学习新东西...听起来花些时间学习HTML和CSS是一个很好的开始!

依赖第三方控件的最大问题是当客户要求你做一些第三方控件无法覆盖的事情时。如果你不能复制他们的复杂性加上额外的功能请求,你的职业生计可能会受到威胁!你最终需要知道如何做到所有这些!

我通常建议您接受新技术。您不必使用它们...但至少应该知道如何使用。这样您就会知道在任何给定的项目中最好的工具是什么。


当然,谢谢。我准备学习HTML + CSS + JS,并得到JQuery、JQ UI的支持 :-) 只是想确认一下,“编写UI代码的人将是我”,以防我错过了什么重要的点;我不想在团队中看起来像个傻瓜,被其他人说“你疯了吗?为什么你自己写所有这些东西,白痴?” 只是想澄清一下,并避免这种情况的发生。 谢谢。 - SL3NewUser
实际上,经常对客户端代码进行小的调整就可以起到很大的作用。 - Arnis Lapsa

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