2009-07-13 98 views
5

我已经阅读了这篇文章,介绍了何时在创建自定义控件时选择Web Control vs. Control的情况,但这还不够。我看到自定义控件从两者都继承,当他们都出售的东西到用户界面。继承自控制与Web控制

http://msdn.microsoft.com/en-us/library/yhzc935f.aspx

“如果你控制呈现的用户界面(UI)元素或客户端上的任何其他可见元素,您应该派生从System.Web.UI.WebControls您的控制.. ::。WebControl的(或派生类)如果控件呈现浏览器中不可见的元素,例如隐藏元素或元素,请从System.Web.UI .. ::。Control派生控件。来自Control并添加了与样式相关的属性,如Font,ForeColor和BackColor。此外,从WebControl派生的控件参与了ASP.NET的主题功能,而无需任何额外的工作。“

所以使用WebControl的唯一原因是如果你想使用他们的样式功能?我只想用stringbuilder输出字符串,所以我不关心那些东西。我宁愿直接使用无表设计和字符串来形成我的控件呈现的HTML。

回答

2

WebControl不呈现表格或类似的东西,除非您告诉它。它所具有的是大多数用户期望从使用UI呈现的控件的样式特征。

使用它并不花你太多。尝试一下,看看它是否会给你带来任何问题。

+0

你说的是它提供的属性,如cssClass等? – PositiveGuy 2009-07-13 19:02:09

+0

我的控件正在从我们的CMS系统中通过我们的CMS管理系统输入的我们的数据库表中指定的HTML进行吐出。任何样式都可以在HTML中已经存在,也可以在任何元素(如div)中使用我的自定义控件将此内容包装在幕后逻辑中。所以我没有预见到需要cssClass等,因为我的控制会处理。因此,如果我从Control继承,它仍然会输出一些主要的UI组件,但不需要在运行时对它进行样式设置。 – PositiveGuy 2009-07-13 19:07:38

+0

好的,这是有道理的,是的,我正在谈论CssClass,BackColor,BorderColor等。 – 2009-07-13 19:39:48

10

控制

从Control类派生使我们的控制,利用由控制类提供的渲染方法,以及使用的ViewState的。

的WebControl

WebControl类从Control类派生的。但是,如果我们从WebControl中派生自定义控件,则可以获得对控件的许多视觉方面的免费支持,如字体大小,CSS类,背景颜色等。

我应该派生哪一类?

当您创建一个自定义控件时,只需要很少或没有UI,那么您应该从Control类派生。如果您的控件确实需要广泛的UI支持,那么您应该从WebControl派生。

来源:http://dotnetslackers.com/articles/aspnet/ASPNETCustomControlsPart1.aspx

+0

好的,所以从“良好标准”的角度来看,唯一的真正切合实际的好处是,如果你打算使用WebControl,那么实现你的控件的任何人都可以在该控件上使用CssClass。像font-size,background-color之类的所有其他字符都是垃圾,因为您应该始终在代码中使用带有样式和ID的.css。 – PositiveGuy 2009-07-13 19:03:24

+0

当您创建需要很少或不需要UI的自定义控件时,则应该从Control类派生。如果您的控件确实需要广泛的UI支持,那么您应该从WebControl派生。好吧,但我可以看到我的观点,我想要WebControl的唯一原因是提供cssClass属性。因此,如果您的控件正在吐出,可以说基于CMS系统的一些UI内容,并且您不需要指定cssClass(因为您是通过您的后台自定义服务器控件中的逻辑来完成此操作),则不要使用WebControl – PositiveGuy 2009-07-13 19:05:39

0

那么,你有一个问题要问?我认为MSDN文章中很好地解决了两者之间的差异。

+0

试图验证除了获取cssClass属性之外是否还有任何其他好处使用WebControl。从Control继承并不意味着你不会对它进行样式设计,你可以在自定义控件方法中始终使用简单样式。真的,我只是没有看到使用WebControl的好处,除非你最终需要cssClass属性可用是我个人总结的。 – PositiveGuy 2009-07-13 19:20:54

+0

问题出在这里,所有那些吐出来的是我刚刚读过的MSDN文章。我明白这一点,但在这里的陈述:“当你正在创建一个需要很少或没有用户界面的自定义控件,那么你应该从Control类派生”。这意味着什么,你是不是要渲染HTML(UI),或者他们的意思是,如果你不需要STYLES。这是该页面上单词的糟糕选择。这句话让人觉得好像你没有渲染任何UI。他们的意思是造型。 – PositiveGuy 2009-07-13 19:24:13

+0

它继续说:“如果您的控件呈现用户界面(UI)元素或客户端上的任何其他可见元素,则应该从System.Web.UI.WebControls .. ::。WebControl派生您的控件”。不对。在我的情况下,它会吐出很多UI ...但用户不应该添加任何css类到它。 – PositiveGuy 2009-07-13 19:25:45