通过属性名访问资源时,是否可以更改使用哪个ResourceManager?

时间:2011-04-29 01:10:37

标签: asp.net-mvc resources

我想使用自定义ResourceProvider但仍然具有强类型资源名称的好处。在我看来,如果我直接访问资源属性似乎是这样的:

@Html.Raw(UIText.Header)

然后直接从resx文件中读取文本,而不是通过web.config中定义的自定义提供程序工厂。

@Html.Raw(HttpContext.GetLocalResourceObject("UIText.resx", "Header").ToString())

工作正常,但是有字符串输入的缺点。我已经创建了一个扩展方法来包装它,但它仍然非常难看:

@Html.ResourceText(() => UIText.Header)

那么,有没有办法直接使用资源属性,但让它们通过自定义提供程序进行路由而无需创建自己的ResXFileCodeGenerator

1 个答案:

答案 0 :(得分:0)

保存字符串的静态类是否适合您?我制作了一个T4模板文件来查看我的.resx并自动生成这个静态类

这是T4模板编译的结果:

public static class ResourceStrings {
    public const string AddAttachments = @"AddAttachments";
    public const string button_create = @"button_create";
    public const string button_delete = @"button_delete";
    public const string button_details = @"button_details";
    public const string button_display = @"button_display";
    ...
}

我将ASP.NET MVC属性用于这样的类:

    [StringLength(8, ErrorMessageResourceType = typeof(i18n),
    ErrorMessageResourceName = ResourceStrings.Client_VatNo_length_validation_msg)]
    public string VatNo;

    [StringLength(10, ErrorMessageResourceType = typeof (i18n),
    ErrorMessageResourceName = ResourceStrings.Client_BaseIdentNr_length_validation_msg)]
    public string BaseIdentNr;

希望我没有完全错过它;)