2012-06-20 30 views
7

我正在使用ASP.NET 4.0 WebForms。我也在使用從其他母版頁繼承的母版頁。我有面板內的控件。基本上有多層容器。這導致元素擁有巨大的ID。我看到ID的長度大約爲300字節!如何使ASP.NET服務器控件獲得最短的ID?

當頁面中有數百個元素時,這些ID會顯着增加頁面大小。我有一個GridView綁定控件。

讓每個服務器控件擁有最短ID的最佳方法是什麼?是否有辦法讓每個元素不依賴於它的容器(ClientIDMode="static")ID,即使在頁面中仍然是唯一的?最後,ASP.NET MVC緩解了這個問題嗎?

回答

1

我覺得ClientIDMode=static是其中的一種。你也可以在你的web.conf中設置它。而在Asp.Net mvc中,您可以完全控制html(特別是在Razor中)。沒有像webforms這樣的想法。你可以控制分配id到html標籤。事實上,Asp.Net mvc是所有其他框架的答案。

1

最後,ASP.NET MVC緩解了這個問題嗎?

是的。

MVC中沒有ViewState,並且您沒有在服務器上運行任何控件。

您沒有使用任何生成大量難以閱讀HTML的服務器控件。

您可以完全控制MVC中的ClientID

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

上述標記總是會有myID的ID,除非我改變它自己。

2

MVC絕對減輕了這個問題,因爲沒有服務器端以相同的方式呈現html代碼。所有的html都直接在你的視圖中,所以你可以完全控制每個項目。您還要冒險(在有數百個輸入的頁面的情況下)碰撞輸入。

可以幫助縮短WebForms中生成的所有html的一種方法是刪除任何不是絕對必需的任何webusercontrol。例如,大多數標籤都是靜態的。它們可以用標準文本或不包含runat="server"屬性的項目正常替換。這將首先防止生成ID。減少產生的垃圾量的另一種方法是從ViewState中移除儘可能多的控件。這將阻止他們加載他們的狀態數據並縮短ViewState。

ClientIDMode是一個可繼承的屬性,因此您可以在web.config(全局),web.config(本地)或頁面級別設置它。你也可以單獨使用它。你的問題明確地消除了這一點,但它可能是具有最大靈活性的最佳選擇,而不必重寫已有的東西。如果重寫不是問題,我建議使用MVC。

相關問題