如何使ASP.NET服务器控件获得最短的ID?

时间:2012-06-20 20:27:19

标签: asp.net asp.net-mvc-3 webforms

我正在使用ASP.NET 4.0 WebForms。我也在使用从其他母版页继承的母版页。我在面板内有控件。基本上有多级容器。这导致元素具有巨大的ID。我看到ID长约300字节!

当页面中有数百个元素时,这些ID会显着增加页面的大小。我有GridView绑定控件。

让每个服务器控件具有最短ID的最佳方法是什么?有没有办法让每个元素都不依赖于它的容器(ClientIDMode="static"除外)ID,即使在页面中仍然是唯一的?最后,ASP.NET MVC是否缓解了这个问题?

4 个答案:

答案 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