为什么我不能在ASP.net MVC中使用服务器控件?

时间:2012-01-27 19:36:06

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

我正准备负责领导小型ASP.net MVC应用程序的开发。这是我第一次创建MVC应用程序,所以我很兴奋!

我仔细阅读了文档,我觉得我对MVC的工作方式有了一般的了解。但是,如果我理解正确,服务器控件(例如GridView)就不是MVC的一部分。

我的问题是:为什么?在我的开发商店,我已经习惯使用像GridView和MS Chart Controls这样的控件,我几乎完全没有使用它们进行开发。这似乎几乎就像重新开始一样。

为什么服务器控件不可用?微软如何期望我在没有他们的情况下工作?有哪些替代方案?

5 个答案:

答案 0 :(得分:61)

  

我的问题是:为什么?

因为它们中的大多数都依赖于ViewState和Postback模型之类的东西,它们是经典WebForms模型的一部分,并且在ASP.NET MVC中不再存在。这些服务器端控件依赖于将对服务器执行回发的事件,这些事件在隐藏字段(ViewState)中保持其状态。在ASP.NET MVC中,您不再使用Button1_Click等事件。在ASP.NET MVC中,您使用模型,控制器和视图。 Controller负责接收用户请求,查询模型,将结果转换为视图模型,并将此视图模型传递给View,View负责以某种形式显示它。

在ASP.NET MVC中,有一些HTML帮助程序可用于在视图之间生成一些可重用的HTML片段。你可以看一下这些助手的Telerik ASP.NET MVC suite例子。他们称之为控件,但它们与经典的WebForms服务器端控件无关。他们只是HTML助手。

基本上,经典的WebForms是Web的漏洞抽象。微软在设计这个框架时所做的就是将现有的Windows开发人员技能带到网络上,这种技能越来越强大。但由于网络仍然是大多数开发人员尚不熟悉的新技术,他们创建了这种抽象来隐藏www的工作方式。那些开发人员习惯于在他们的Windows窗体上拖放控件,双击为他们生成一些代码的按钮,在这些按钮中放置他们的数据访问逻辑等等。借助WebForms,该模型转换为Web应用程序开发。 HTTP协议成功地隐藏在这个名为WebForms的抽象背后。例如,您不需要知道HTML,也不需要Javascript,甚至不需要CSS来使用WebForms创建网站,这非常好,因为框架为您提取所有这些内容。不幸的是,这样做会阻止您轻松利用某些人在开发Web应用程序时可能需要的低级Web技术的全部功能。

ASP.NET MVC所做的基本上是删除这个漏洞的抽象,并将www以其创建者的方式带给开发人员。与传统的WebForms相比,ASP.NET MVC还不够成熟,所以你不能期望找到相同范围的可用控件和小部件,但事情正在慢慢转变。

我建议您从ASP.NET MVC开始:http://asp.net/mvc。继续,观看视频,播放样本,看看ASP.NET MVC是否适合您。当然,如果您遇到某些特定的困难或问题,请不要犹豫再回到这里询问。

答案 1 :(得分:9)

  

我已经习惯使用像GridView和MS Chart Controls这样的控件,在没有它们的情况下开发我几乎完全失去了。这似乎几乎就像重新开始一样。

在这种情况下,重新开始 good

我经历了类似的旅程。如果直接HTML吓到你,请尝试使用System.Web.UI.HtmlControls命名空间。这将允许您访问标准HTML控件,但如果需要,您仍然可以将它们转换为服务器控件(通过指定runat="server"属性,或将它们转换为等效的ASP.NET控件

除了Darin's answer之外,ASP.NET还存在另一个问题:您必须使用Microsoft的Web视图。你爱的GridView?它产生了糟糕的HTML。它提供的Paging控件?更糟。即使您对HTML合规性知之甚少,嵌套表也应该让您感到寒心。在某种程度上,使用GridView的每个人都很幸运,微软支持的遗留网络(在较小程度上,谷歌和Mozilla)来自这样一个上帝可怕的起点。

最后,总结一下:我的建议是,您尝试仅使用HtmlControls重写页面或开发新的Web应用程序(尽可能最好)。您可能需要学习一些JavaScript / jQuery,并且可能不得不冒险进入AJAX世界,以使您的控件按照您希望的方式运行。

使用它作为进入MVC世界的垫脚石。您将不会使用相同的技术(并且可能会丢弃大量的JavaScript / jQuery),但它会帮助您以更小,更容易吸收的块来改变您对Web开发的思考方式。

最终,无论你喜欢你的ASP.NET控件,你都会有更大的自由度,你也将开发利用更新技术的网站,这将是为您的网站提供附加价值。

答案 2 :(得分:3)

其核心是模型视图控制器(MVC),它可以促进解耦。我们的想法是为View(网页)提供一个模型,其中包含需要呈现的所有数据。服务器控件紧密耦合。 MVC中没有状态概念,或者“应该”不是概念。

答案 3 :(得分:3)

这就是MVC的观点。它消除了服务器控件提供的高级UI抽象,并为您留下了html和javascript。 (它还增加了一些非常酷的模型绑定功能)

答案 4 :(得分:0)

我是MVC的新手,发现在创建不适合_Layout的小型可重用UI元素时,使用Partial Views非常相似。例如,滑块,幻灯片,导航,特色部分,虽然您可以使用@section为此我发现部分视图更有益。这个概念使我能够创建可重用的库,我可以轻松切换出来并在其他项目中使用。对我而言,这与控制类似,尽管对这种类比有争议和反对。