ASP.NET NamingContainer命名约定

时间:2011-03-01 23:20:54

标签: asp.net performance

背景

您好!我正在开发一个项目,在这个项目中,客户端需要在一个页面上发生很多事情,这导致了一大堆HTML被呈现给客户端浏览器。

主要问题是输入标记(其中设置了runat =“server”属性),由于验证,updatepanel触发器,viewstate和控制标记本身,这些标记大小会导致标记大小急剧增加。我已尽我所能减少我正在使用的触发器数量,我正在压缩视图状态(达到原始视图状态大小的8%),我已经摆脱了很多ASP.NET验证器并且我自己滚动了,并且我一直在使用ClientIdMode来减少许多asp.net元素的ID属性的长度。所有这些组合显着减少了发送到客户端的HTML数量(例如,从请求的2兆字节到500-600 kb - 这些都是巨大的页面,请注意)。

问题

我在减少方面遇到的一个方面就是输入元素的自动生成的'name'属性

<input name="ctl00$ctl00$ctl00$_main$_main$_bodyMatterPhase$_phaseTree$ctl00$_taskTree$ctl00$_taskDetails$_detailList$ctrl0$_row$_descriptionText" type="text" value="Investigation Week 1" maxlength="100" id="_taskTree_0__taskDetails_0__detailList_0__row_0__descriptionText_0" style="width:170px;">

正如您在上面所看到的, 297个字符中的名称属性 139 ,几乎 50%占用了标记加价以那个巨大的名字。

有没有人对如何在ASP.NET中的某个地方粘贴钩子有任何想法,我可以以某种方式翻译它们或以不同方式生成它们;说而不是ctl00 $ ctl00 $ ctl00 $ _main $ _main $ _bodyMatterPhase $ _phaseTree $ ctl00 $ _taskTree $ ctl00 $ _taskDetails $ _detailList $ ctrl0 $ _row $ _descriptionText,它可能是一个像0x0AEED4B6445A11E08F873606E0D72085这样的GUID,缩短了105个字符。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

在早于4.0的asp.net版本中不可能 在4.0中,您具有ClientIDMOde属性,您可以将其设置为“静态”值以获得更短的名称 请查看更多信息:http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientid.aspx

答案 1 :(得分:0)

很高兴为您提供两个问题的答案。您的项目以它们的方式命名的原因是实现了INamingContainer,其中每个容器前缀具有唯一标识符的子控件的名称。因此,id的结构和长度由HTML的结构控制。

现在,在.NET 4.0中,您可以控制自己控制这一点。我建议您查看此article,了解更多信息。