我正在使用ASP.NET 4.0 WebForms。我也在使用从其他母版页继承的母版页。我在面板内有控件。基本上有多级容器。这导致元素具有巨大的ID。我看到ID长约300字节!
当页面中有数百个元素时,这些ID会显着增加页面的大小。我有GridView
绑定控件。
让每个服务器控件具有最短ID的最佳方法是什么?有没有办法让每个元素都不依赖于它的容器(ClientIDMode="static"
除外)ID,即使在页面中仍然是唯一的?最后,ASP.NET MVC是否缓解了这个问题?
答案 0 :(得分:3)
我建议changing the ClientIdMode使用可预测或静态,以查看是否会产生较短的ID。
此外,CodeProject article似乎可以满足您的需求。
答案 1 :(得分:2)
MVC绝对缓解了这个问题,因为没有服务器端以相同的方式呈现html代码。您的所有html都直接在您的视图中,因此您可以完全控制每个项目。您还会冒着碰撞输入的风险(如果页面有数百个输入)。
您可以帮助缩短WebForms中生成的所有html的一种方法是删除任何非必要的webusercontrol。例如,大多数标签都是静态的。它们可以正常替换为标准文本或不包含runat="server"
属性的项目。这样可以防止首先生成ID。减少生成的垃圾量的另一种方法是从ViewState中删除尽可能多的控件。这将阻止它们加载状态数据并使ViewState更短。
ClientIDMode是一个可继承的属性,因此您可以在web.config(全局),web.config(本地)或页面级别设置它。您也可以单独使用它。您的问题明确地消除了这一点,但它可能是最灵活的选择,而无需重写您已有的内容。如果重写不是问题,我建议使用MVC。
答案 2 :(得分:1)
我认为ClientIDMode=static
是其中之一。你也可以在你的web.conf中设置它。在Asp.Net mvc中,你可以完全控制html(特别是在Razor中)。没有像webforms这样的想法。您可以控制为html标记分配ID。事实上,Asp.Net mvc是所有其他框架的答案。
答案 3 :(得分:1)
最后,ASP.NET MVC是否可以缓解此问题?
是。
MVC中没有ViewState
,并且您没有在服务器上运行任何控件。
您没有使用任何生成大量难以阅读的HTML的服务器控件。
您可以完全控制MVC中的ClientID
。
<a href="#" id="myID">Click</a>
除非我自己更改,否则上述标记的ID始终为myID
。