如何从资源文件加载CustomValidator上的ErrorMessage?

时间:2012-08-29 14:53:56

标签: c# asp.net globalization

我想从资源文件中为ErrorMessage加载CustomValidator

我的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,我也很好奇。

2 个答案:

答案 0 :(得分:12)

假设您有一个页面(或控件)的本地资源,这将是这样做的方式

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.   
  3. 在控制标记中,添加隐式本地化属性。

         

    例如:

         

    &lt; asp:Button ID =“Button1”runat =“server”Text =“DefaultText”        meta:resourcekey =“Button1”/&gt;

  4.   

来源:MSDN

答案 1 :(得分: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;  
   } 
}