如果我有一個稱爲資源的.resx文件,但我不是我想要的那樣。我錯過了什麼?
您可能正在尋找本地資源和元:獲取ResourceKey屬性。
本地是按頁面定義的(您爲它們定義與您的頁面完全相同的名稱),您可以使用它們來存儲特定於一個頁面的資源。
App_LocalResources/{pagename}.resx
然後調用從資源文件資源對象(AboutUs.resx,AboutUs.fr-:您可以通過添加ASP.NET特定的文件夾(App_LocalResources文件),然後它裏面的本地資源爲每個頁面創建它們BE.resx,...)從頁面標記(AboutUs.aspx)將是這樣的:
你提到accros整個網站被定義
<asp:Literal Text='About Us' meta:resourcekey="aboutUsLnk" runat="server" />
環球資源(通常是你存儲在這裏,如「編輯資源「,」保存「等),通常會按照您所示的方式進行調用。
這裏瞭解更多詳情:http://msdn.microsoft.com/en-us/magazine/cc163566.aspx
編輯
啊抱歉誤會,你可能會問如何調用您的全球資源,這名每文化差異。您可以使用GetGlobalResourceObject
,在您的標記代碼中執行該操作,與您在後面的代碼中執行的操作幾乎相同。
以外的任何服務器控件,你可以這樣寫:
<%= GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%>
要調用GetGlobalResourceObject
服務器控件的屬性不能使用<%= %>
裏面,但是你可以用服務器控件周圍(在那些允許這樣做,像Label
爲例):
<asp:Label ID="Label1" runat="server"><%= GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%></asp:Label>
或者,您可以使用綁定語法:
<asp:Label ID="Label1" runat="server" Text='<%# GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), "aboutUsLnk")%>'></asp:Label>
注意,在使用後者時,你會需要綁定控件:
protected void Page_Load(object sender, EventArgs e)
{
Label1.DataBind();
}
EDIT 2
你可以用上面的代碼中一些輔助的方法來提高代碼readabilty。在後面的代碼,你把它聲明:
protected string GetResource(string resourceName)
{
return GetGlobalResourceObject(System.Threading.Thread.CurrentThread.CurrentUICulture.ToString(), resourceName).ToString();
}
而且在標記可以similiar稱其爲以前:
<asp:Label ID="Label1" runat="server" Text='<%# GetResource("aboutUsLnk")%>'></asp:Label>
<asp:Label ID="Label2" runat="server"><%= GetResource("aboutUsLnk")%></asp:Label>
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –