遷移至 .NET 2.0 後,benSoft.web.WebControls.PopupBox 控件彈出內容為空白。經排查,根因在於 preMark 屬性行為差異導致客戶端 ID 生成邏輯不一致,進而使服務端生成的 HTML/JS 與預期模板 *.PopupBox.dialog.htm 中的佔位符無法正確替換。
public string preMark
{
get
{
string clientID = base.NamingContainer.ClientID;
clientID = (clientID == null) ? "" : clientID;
return (clientID + ((clientID == "") ? "" : "_"));
}
}
NamingContainer.ClientID 常為 null,preMark 返回空字符串 ""。NamingContainer.ClientID 有具體值,preMark 返回 "ContainerID_" 格式字符串。PopupBox 內部生成服務器控件 (如 HiddenField、IFrame) 時,有數處拼接 ID 的邏輯 缺失 this.preMark + this.UniqueMark + "***\"。導致:
preMark 前綴。*.PopupBox.dialog.htm 中的佔位符替換邏輯 (基於 Replace()) 期望的 ID 格式不含該前綴 (或格式不匹配)。PopupBox 類中所有生成子控件 ID 的代碼點。this.preMark + this.UniqueMark 前綴拼接。控件開發中,NamingContainer.ClientID 變化 是跨版本遷移的高危點。所有動態生成控件的 ID 構建務必依賴統一的
preMark/UniqueMark邏輯,避免硬編碼拼接導致版本不兼容。