【问题标题】:Few confusing things about WebControl.Style property关于 WebControl.Style 属性的一些令人困惑的事情
【发布时间】:2010-01-04 19:26:48
【问题描述】:


1)

WebControl.Style (MSDN):

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

CssStyleCollection (MSDN):

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


一)

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

  • 1234563然后检查要为该控件呈现哪些 html 样式属性?


b) 如果我的上述假设是正确的(我对此表示怀疑)——为什么 Asp.Net 不简单地检查 GridView 的样式属性(如 GridView.BorderColor 等)并相应地呈现适当的 html 样式属性?将所有这些样式添加到 CssStyleCollection 中然后再渲染适当的属性有什么意义?


2) WebControl.Style (MSDN):

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

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


感谢

【问题讨论】:

    标签: asp.net css webforms


    【解决方案1】:

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

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

    HTH。

    【讨论】:

    • 我意识到 Style 不是从 CssStyleCollection 继承的,但我很困惑为什么所有样式(属于 Style 类型的后代)都需要在渲染之前转换为 CssStyleCollection?
    • 内部设计;他们就是这样做的……我不知道真正的原因……虽然如果你正在创建自定义控件,你可以简单地使用 Style 对象在 Render 方法中写出值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多