【问题标题】:Why is runat="server" required for controls in skin files?为什么皮肤文件中的控件需要 runat="server"?
【发布时间】:2011-11-28 19:47:12
【问题描述】:

正如标题所说..为什么?

我知道为什么它需要在普通的 ASP.NET 控件上,有很多关于这个的问题。

但既然你只能在皮肤文件中定义 .NET 控件(没有普通的 HTML 标记),为什么皮肤文件中的每个控件仍然需要 runat="server"

它与样式或主题无关。 为什么我仍然需要将其添加到我的皮肤文件中的所有控件中?有谁知道“幕后”会发生什么?

【问题讨论】:

  • 因为微软这么说:-)
  • 一种微软方式,雷德蒙德 ;-)
  • 感觉这就是唯一的原因......'因为微软这么说'这就是我问它的原因:)

标签: asp.net themes markup skins runatserver


【解决方案1】:

同样,您必须了解服务器端语言的工作原理。

在呈现页面之前,服务器端预处理器会将所有 ASP.NET 标记转换为浏览器可理解的 HTML(例如,浏览器不知道

我敢说,预处理器最初是为了根据该属性的存在而知道它需要操作什么。否则,即使它什么也没做,它也必须处理每个标签。它本来可以写成只查找名称空间,但这需要额外的处理。

skin file 是一个特殊的 ASP.NET 概念,用于在框架内定义的标记。因此,这些标签必须具有“runat=server”是有道理的。 MS 可以在他们的预处理器中写入一个特殊的规则,例如“如果它是一个皮肤文件,假设它都是 ASP 标签”......但这样的规则真的不能扩展。另外,它们是糟糕的文档。

作为 Web 开发人员,您应该了解哪些标签实际上是 HTML,哪些是框架提供的便利标签。 "runat=server" 属性使该描述明确。

您可以将 runat="server" 添加到纯 HTML 标记(例如 )中,但通常没有什么理由这样做,而且这是一种不好的做法。

为了提高可移植性,您可能需要考虑放弃皮肤文件并利用 CSS。属性对于设置样式非常冗长,这使得最终呈现的页面更大(加载时间更长,用户体验差)并且没有语义。

【讨论】:

  • moving away from skin files and leveraging CSS 迈向 MVC
  • 又是为什么?这样的问题还有吗?
猜你喜欢
  • 2010-11-11
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 2010-09-23
  • 2011-01-31
  • 2014-04-18
  • 1970-01-01
  • 2014-05-27
相关资源
最近更新 更多