簡體   English   中英

ASP.Net-命名容器和ClientIDMode =“ Static”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM