2010-09-09 37 views
1

我是ASP .NET開發黑色藝術的初學者,所以如果這是一個愚蠢的問題,請原諒我。 經過一番谷歌搜索,然後閱讀(一些...)ASP .NET 3.5釋放,我還沒有找到一種做我想要的方式 - 這通常意味着我試圖做一些愚蠢的事情,或者它是如此明顯我已經錯過了:)在ASP .NET中訪問服務器組件中的資源

我正在創建一個服務器控制,以供我公司正在開發的多個站點使用。這不是什麼幻想,只是一個標準,你可能編輯和創建用戶控制。

這樣做自然需要本地化一些文本。

對我來說,這樣做的一種自然方式是以某種約定命名的全局資源,其中包含服務器控件的項目可能會填充本地化數據。

但是,我在使用我的組件訪問這些資源時遇到了一些麻煩。

在App_GlobalResources文件夾的Project A中創建了一個名爲CreateOrEditUserControl.da.resx的資源文件(注意:是否需要將我的App_GlobalResources文件夾添加到Web配置或其他?)。項目A包含來自項目B並通過程序集引用加載的CreateOrEditUserControl。 CreateOrEditUserControl.da.resx包含映射到字符串Brugernavn關鍵用戶名(這僅僅是一個丹麥的定位,因爲你可能已經猜到了...)

裏面我在的CreateChildControls()方法控制(因爲我需要這裏本地化的字符串),我試過訪問的資源通過以下方式:

HttpContext.GetGlobalResource("CreateOrEditUserControl","UserName"); 
HttpContext.GetGlobalResource("CreateOrEditUserControl.da","UserName"); 
HttpContext.GetGlobalResource("CreateOrEditUserControl.da.resx","UserName"); 
HttpContext.GetLocalResource("CreateOrEditUserControl.da.resx","UserName"); 

其中前三種的返回null,而其中最後拋出一個異常,因爲我沒有權利從所述資源在我的組件中,這似乎是合乎邏輯的

到目前爲止,我不得不求助於一個「黑客」,其中你可以在查詢字符串中指定語言,並手動插入字符串。然而,這是不受歡迎的,因爲任何變化都需要組件的更改,而不僅僅是用戶...

這樣做的正確方法是什麼 - 如果有的話?

在此先感謝!

回答

0

對我來說,這樣做的自然方式是以某種約定命名的全局資源,其中包含服務器控件的項目可能會用本地化數據填充。

我知道接下來對一無所知ASP.Net,但如果我有共同控制,在不同的頁面或在各種應用中使用,我將包括該控制「內部」翻譯資源。那麼你不必爲每個項目本地化它,而只需要一次。我很確定這是可能的ASP.Net。對於訪問全球資源(對於我有限的知識再次抱歉),您可能必須使用ResourceManager或ResourceReader。

+0

感謝您的回覆!在組件內部加入資源是非常有可能的 - 但並不能解決更大的問題,從我看到的情況來看。它仍然不允許組件的用戶「注入」他自己的本地化數據?感謝ResourceManager/Reader上的提示 - 我會查看這些內容! – Fafnr 2010-09-10 11:18:57