关于WebControl.Style属性的一些令人困惑的事情

时间:2010-01-04 19:26:49

标签: asp.net css webforms


1)

WebControl.Style(MSDN):

  

控件具有WebControl.Style属性,该属性返回CssStyleCollection,其中包含要在服务器控件的外部标记上呈现的HTML样式属性。

CssStyleCollection(MSDN):

  

在解析包含Web窗体页面时,为特定HTML服务器控件声明的任何样式都将添加到集合中。


a)

  • 据我所知,在解析服务器控件(例如GridView)之前,为GridView声明的所有样式(包括GridView.RowStyle和GridView.BorderColor等)都添加到GridView中。样式集合(类型为CssStyleCollection)?

  • 因此,当解析GridView时,Asp.Net不会检查GridView.RowStyle属性,然后相应地渲染相应的html样式属性,而是首先将所有GridView的样式传输到CssStyleCollection,并且仅然后检查要为该控件呈现的html样式属性?


b)如果我的上述假设是正确的(我怀疑) - 为什么Asp.Net不能简单地检查GridView的样式属性(如GridView.BorderColor等)并相应地渲染适当的html样式属性?将所有这些样式添加到CssStyleCollection并仅渲染适当的属性有什么意义?


2)WebControl.Style(MSDN):

  

控件具有WebControl.Style属性,该属性返回CssStyleCollection,其中包含要在服务器控件的外部标记上呈现的HTML样式属性。

我假设许多Web服务器控件(如GridView)包含样式属性,这些属性将在html控件的内部标记上呈现。该文本是否表明这些属性未添加到WebControl.Style集合中?如果没有,为什么不呢?


感谢名单

1 个答案:

答案 0 :(得分:1)

Style对象中的所有内容都被适当地渲染,或者至少在该控件想要渲染它的地方(例如,RowStyle为gridview行渲染,而EmptyDataStyle为渲染空消息的容器渲染),所以它是由控制来渲染它。

如果使用.NET反射器,它可以告诉您Style不从CssStyleCollection继承,但有一个方法(GetStyleAttributes)可以将Style对象转换为CssStyleCollection集合,用于渲染)。

HTH。