2012-08-29 25 views
6

我想從資源文件加載我的CustomValidatorErrorMessage如何從資源文件加載CustomValidator上的ErrorMessage?

我有我的CustomValidator設置像這樣:

<asp:CustomValidator ID="cv1" runat="server" ControlToValidate="txt1" 
     ErrorMessage="TEXT TO BE LOCALIZED" OnServerValidate="cv1_Validate" /> 

而我的驗證方法如下:

protected void cv1_Validate(object source, ServerValidateEventArgs e) 
{ 
    if (FalseCondition) 
    { 
     e.IsValid = false; 
    } 
    else 
    { 
     e.IsValid = true; 
    } 
} 

驗證工作正常,但我想有ErrorMessage拉來自我的本地資源文件。

編輯:我也很好奇,如果有什麼辦法可以使用meta:resourcekey來做到這一點。

回答

10

假設你有你的頁面(或控制)的本地資源,這將是做

ErrorMessage="<%$ resources:ResourceName %>" 

萬一,你得到從全局資源文件中的文本,你應該做這樣的事情

ErrorMessage="<%$ resources:Strings, ResourceName %>" 

其中Strings是該文件的名稱。這種方法被稱爲明確的本地化。

編輯

您可以使用meta:resourcekey。這被稱爲隱式本地化。您需要擁有本地資源,因爲此方法對全球資源無效。

  1. 請確保您有符合以下條件的本地資源文件(.resx文件):

    • 他們是在App_LocalResources文件夾中。

    • 基本名稱與頁面名稱相匹配。

    例如,如果您正在使用名爲Default.aspx的頁面工作,資源文件被命名爲Default.aspx.resx(默認資源),Default.aspx.es.resx,Default.aspx的.es-mx.resx等。

    • 該文件中的資源使用命名約定resourcekey「property」。

    例如,鍵名Button1「Text」。

  2. 在控件標記中,添加一個隱式本地化屬性。

    例如:

    < ASP:按鈕ID = 「Button1的」 RUNAT = 「服務器」 文本= 「DefaultText」 元:獲取ResourceKey = 「Button1的」/ >

源:MSDN

1

如果您想在代碼隱藏中執行此操作,可以使用以下代碼:

ResourceManager resmgr = new ResourceManager("YourApplication.YourBaseResourceFile ", 
           Assembly.GetExecutingAssembly()); 

protected void cv1_Validate(object source, ServerValidateEventArgs e) 
{ 

if (FalseCondition) 
    { 
     CultureInfo ci = Thread.CurrentThread.CurrentCulture;  
     String str = resmgr.GetString("Error Msg Key in Resource File"); 
     cv1.ErrorMessage =str;  
     e.IsValid = false; 
    }  
else 
    { 
    e.IsValid = true; 
    } 
}