如何禁用/覆蓋命名容器的 ID 生成內容頁面的控制項 ID
我們有一個現有的 ASP.Net Web 應用程序,我們希望將其轉換為使用母版頁。在執行此操作的過程中,我發現為 HTML 元素生成的 HTML id 以 ContentPlaceHolder 的 id 為前綴。這就是我們設置 ContentPlaceHolder 的 clientidmode=static 時可以預料到的。現在,由於我們有很多使用 id 的現有客戶端腳本,所以當我們使用母版頁時,這部分會中斷,並且執行所有的 javascript 以確保我們使用 Control.ClientID 呼叫 javascript 是一項艱鉅的工作,因為很多都是硬編碼的。
有沒有辦法禁用前綴?如果我創建每個控制項並設置其 ClientIdMode=static,我可以成功執行此操作,但我更希望設置一次,以確保所有控制項都具有其 ClientIdMode=static。那可能嗎?或者是否可以覆蓋 ContentPlaceHolder 的 NamingContainer?
該平台是.Net 4.0
(在 web.config 中使用 ClientIdMode=static 解決上述問題後,如下面的答案所述),我遇到了自動生成“name”屬性的問題,並且沒有設置為我介紹之前的任何內容母版頁。這給我現有的伺服器程式碼帶來了問題,它有很多 Request.Form
$$ $$. 知道解決這個問題的最佳實踐是什麼嗎? 感謝聖戰
您可以
ClientIDMode在頁面級別:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Static" %>母版頁級別:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" ClientIDMode="Static" %>和 Web.Config 級別(使所有頁面都繼承此行為):
<system.web> <compilation debug="true" targetFramework="4.0"/> <pages clientIDMode="Static"></pages> </system.web>
如果您不以 .Net 框架 4 為目標,並且 clientIDMode 列舉不可用,則可以簡單地覆蓋控制項類。這是 HtmlGenericControl 的範例,但可以使用任何其他控制項完成:
public class NoNamingContainerControl : HtmlGenericControl { public NoNamingContainerControl(string tag) : base(tag) { } public override string ClientID { get { return this.ID; } } }此程式碼應適用於任何 .Net 框架版本,儘管在 .net 4 中您可能應該使用 clientIDMode