DNN 永遠運行於網站根目錄(Default.aspx 載入皮膚與模組)。所有資源引用必須從根目錄起算。
模組安裝於 DesktopModules/MyModuleName,View.ascx 需引用同目錄下 CompanyLogo.gif。
./CompanyLogo.gif ❌ 相對路徑基於根目錄,找不到檔案。DotNetNuke_2/DesktopModules/MyModuleName/CompanyLogo.gif ✅ 但虛擬目錄名稱不固定,不可攜帶。PortalModuleBase 基類提供 ModulePath 動態生成模組相對路徑:
<img src="<%=ModulePath%>CompanyLogo.gif" alt="youralt" />
ModulePath 值為 /DotNetNuke_2/DesktopModules/MyModuleName/,自動適應虛擬目錄變化。
DotNetNuke.Common.Globals.ResolveUrl 將 ~ 解析為應用程式根路徑:
Page.ResolveUrl("~/DesktopModules/MyModuleName/CompanyLogo.gif")
ApplicationPath 為 /DotNetNuke_2,~ 自動替換為該路徑。
~ 語法,彈性更高。善用這兩招,徹底解決模組資源引用遷移痛點。