7

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

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

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

4

4 回答 4

3

我建议将 ClientIdMode 更改PredictableStatic,以查看是否会产生更短的 ID。

此外,这篇CodeProject 文章似乎可以满足您的需求。

于 2012-06-20T20:34:30.747 回答
2

MVC 绝对缓解了这个问题,因为没有以相同方式呈现 html 代码的服务器端。您的所有 html 都直接在您的视图中,因此您可以完全控制每个项目。您还冒着冲突输入的风险(对于具有数百个输入的页面)。

您可以帮助缩短 WebForms 中生成的所有 html 的一种方法是删除任何对于成为 webusercontrol 不是绝对必要的内容。例如,大多数标签都是静态的。它们可以正常替换为标准文本或不包含该runat="server"属性的项目。这将首先防止生成 id。减少生成的垃圾数量的另一种方法是从 ViewState 中删除尽可能多的控件。这将阻止他们加载他们的状态数据并保持 ViewState 更短。

ClientIDMode 是一个可继承的属性,因此您可以在 web.config(全局)、web.config(本地)或页面级别进行设置。您也可以单独使用它。您的问题专门消除了这一点,但它可能是具有最大灵活性的最佳选择,而无需重写您已有​​的内容。如果重写不是问题,我建议使用 MVC。

于 2012-06-20T20:40:00.773 回答
1

最后,ASP.NET MVC 是否缓解了这个问题?

是的。

MVC中没有ViewState,并且您没有在服务器上运行任何控件。

您没有使用任何会生成大量难以阅读的 HTML 的服务器控件。

您可以完全控制ClientIDMVC 中的 's。

<a href="#" id="myID">Click</a>

myID除非我自己更改,否则上述标记将始终具有 id 。

于 2012-06-20T20:38:13.893 回答
1

我认为ClientIDMode=static是其中一种方式。你也可以在你的 web.conf 中设置它。在 Asp.Net mvc 中,您可以完全控制 html(尤其是在 Razor 中)。没有像网络表单这样的想法。您可以控制将 id 分配给 html 标签。事实上 Asp.Net mvc 是对所有其他框架的回答。

于 2012-06-20T20:32:01.387 回答