2011-11-28 77 views
3

喜欢标题说..为什么?为什么皮肤文件中的控件需要runat =“server”?

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

但是,既然您只能在皮肤文件中定义.NET控件(无正常的HTML标记),为什么皮肤文件中的每个控件仍然需要runat="server"

它与风格或主题无关。 是否有任何理由为什么我仍然需要将它添加到我的皮肤文件中的所有控件?有人知道'幕后'会发生什么吗?

+6

因为微软这么说:-) –

+0

微软的一种方式,雷蒙德;-) –

+0

它有点感觉就是这样的唯一原因..'因为微软这么说'这就是为什么我问它:) –

回答

6

同样,你必须了解服务器端语言是如何工作的。

在呈现页面之前,所有的ASP.NET标记都被服务器端预处理器转换为浏览器可理解的HTML(例如,浏览器没有关于什么的概念,例如:< asp:button >)。这意味着ASP.NET提供的所有控件/模块/任何不是只是HTML都需要具有这些属性。

我敢肯定,预处理器原本是为了知道它需要什么操作而基于该属性的存在而运行的。否则,即使它没有做任何事情,它也必须处理每个标签。它可能已经被写入只是寻找命名空间,但这需要额外的处理。

A skin file是一个特殊的ASP.NET概念,用于在框架内定义的标签。因此,这些标签必须具有“runat = server”才有意义。 MS可能已经在其预处理器中写入了一条特殊规则,例如“如果它是皮肤文件,假设它全部是ASP标签”......但是这样的规则实际上不能缩放。另外他们是不好的文档。

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

您可以将runat =“server”添加到纯HTML标记,例如<输入>,但通常没有什么理由,这是一种不好的做法。

对于向前移动的可移植性,您可能需要考虑从皮肤文件移开并利用CSS。属性对于设置样式非常冗长,这会使最终呈现的页面变大(加载时间更长,提供的用户体验较差)和非语义。

+0

'远离皮肤文件并利用CSS和MVC移动 –

+0

为什么呢?还有更多这样的问题吗? –

相关问题