[英]ASP.Net - Naming Containers and ClientIDMode=“Static”
MSDN文檔陳述有關ClientIdMode的信息:
靜態 ClientID值設置為ID屬性的值。 如果控件是命名容器,則該控件將用作其包含的任何控件的命名容器層次結構的頂部。
來源: http : //msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode%28v=vs.100%29.aspx
但是,我發現情況並非如此。 例如,我有一個用戶控件:
<uc1:WidgetsListControl runat="server" id="WidgetsListControl" ClientIDMode="Static" />
出於很好的考慮,盡管我不確定需要哪一個,我也在控制源中也設置了clientidmode:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WidgetsListControl.ascx.cs" Inherits="WebApplication1.WidgetsListControl" EnableViewState="false" ClientIDMode="Static" %>
在用戶控件中,我有一個文本框:
<asp:TextBox ID="testTextBox" runat="server" />
我的期望是該文本框將被命名為WidgetsListControl$testTextBox
但是,我發現視圖源是:
<input name="ctl00$MainContent$WidgetsListControl$testTextBox" id="testTextBox" type="text"/>
我想念什么? 有沒有一種方法可以實現我要查找的內容(較短的ID),而無需在用戶控件中的每個控件上都設置“靜態”?
編輯:
實際上,在仔細觀察之后,我發現ID屬性正在按MSDN中的描述工作-但是name屬性仍然是命名容器層次結構的完整串聯。
給定一個高復雜性的站點,這些控件的名稱和ID開始占用帶寬的大部分(標記大小)。 在這方面,我似乎找不到任何可行的方法來簡化標記。
您必須在Panel或帶有runat="server"
的控件中擁有此控件,並且自定義控件本身是其子級的命名容器。 如果希望標識符不改變其命名方式,則需要使用Predictable
(IIRC)客戶端ID模式。
注意:盡管在Predictable
文檔中似乎並非如此,但我確信這是我一直以來在ASP.NET中獲取“干凈的” .NET標識符的方法。
此外,如果要全局應用ClientIDMode,請在<pages>
元素的屬性中的web.config文件中指定它。
ClientIdMode =“ Static”確實按照Microsoft的描述工作。
確保您查看生成的源中的ID,而不是名稱。 那是我犯的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.