[英]How to use .resx and .resource files in custom server control asp?
我正在編寫自己的服務器端控件,並且正在使用存儲在.resx
文件中的圖像。 在控制台應用程序中,此代碼工作正常:
ResXResourceReader rsxr = new ResXResourceReader("Resource1.resx");
foreach (DictionaryEntry d in rsxr)
{
Console.WriteLine(d.Key.ToString() + ":\t" + d.Value.ToString());
}
rsxr.Close();
但在這里
protected override void RenderContents(HtmlTextWriter output)
{
ResXResourceReader rsxr = new ResXResourceReader("Resource1.resx");
base.RenderContents(output);
foreach (DictionaryEntry d in rsxr)
{
output.Write(d.Key.ToString());
}
}
我收到此錯誤:
找不到文件“C:\\Program Files\\Common Files\\Microsoft Shared\\DevServer\\10.0\\Resource1.resx”
我嘗試使用 ResourceManager,但它需要一個.resource
文件。 我無法訪問resgen
工具(命令提示符不理解resgen
命令)並安裝它(在嘗試期間出現一些錯誤)。
我的問題是:
為什么我無法讀取.resx
?
如何正確安裝resgen
工具?
謝謝。
將資源文件存儲在應用程序根目錄中的App_GlobalResources
文件夾下或與用戶控制文件同名的App_LocalResources
被認為是一種很好的做法。 因此,例如用戶用戶控件是本地資源文件夾中的 uc.ascx 文件應該是 uc.ascx.resx。 這樣維護起來更容易,而且asp.net 會自動檢測到它。
現在你的答案是:
第一個問題:使用Server.MapPath("~/")
直接指向 web.config 所在的物理位置。 如果要使用 Controls 文件夾中的資源文件,則必須編寫Server.MapPath("~/Controls/Resource1.resx")
以獲取路徑。
不確定您想用 resgen 工具做什么? 編譯應用程序時,也會編譯資源文件。 選擇您的資源文件並單擊 F4,它將顯示您的構建操作,在構建操作中選擇資源,您的資源文件將包含在程序集中。
您可以查看此帖子以獲取更多信息: 如何在 asp.net 網站中使用圖像資源?
根據您的描述,我了解到您需要找到並訪問用戶控件的資源文件。 我發現它可以通過以下方式很好地工作:
在項目級別創建App_GlobalResources (通過上下文菜單Add -> Add ASP.NET Folder -> App_GlobalResources
)
創建與控件同名的資源文件,但在App_GlobalResources 內。 例如,如果控件名為myControl.ascx
,則默認語言的資源文件名稱必須為myControl.ascx.resx
為您需要的每種語言創建額外的資源文件。 例如,如果您需要德語(“ de-DE
”),則添加 myControl.ascx.de.resx
添加類MultiLanguageUserControl
如下:
public class MultiLanguageUserControl : System.Web.UI.UserControl { public string getResValue(string id) { var ctrlPath = TemplateControl.AppRelativeVirtualPath; var ctrlFile = System.IO.Path.GetFileName(ctrlPath); var resObj = GetGlobalResourceObject(ctrlFile, id); if (resObj!=null) return resObj.ToString(); else return string.Format("UNRESOLVED[{0}]", id); } }
打開 myControl 背后的代碼並使其繼承自MultiLanguageUserControl
而不是System.Web.UI.UserControl
:
public partial class myControl : MultiLanguageUserControl { //... }
在 HTML 代碼中,使用新函數,例如: <%=getResValue("resid")%>
,其中"resid"
是您要查找的資源字符串的名稱。 您還可以使用 HTML 編碼標記<%:
代替<%=
,具體取決於您的要求。 或者,您可以在用戶控件中服務器端 C# 代碼的任何位置使用getResValue
從資源文件中檢索值。
確保在使用用戶控件的頁面的Page_Load
事件中支持語言檢測。 此處描述了如何執行此操作(查找函數InitializeCulture
)。
注意:如果您想從用戶控件內部讀取頁面的本地資源字符串,請查看此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.