我想使用自定义 ResourceProvider,但仍然具有强类型资源名称的好处。在我看来,如果我像这样直接访问资源属性:
@Html.Raw(UIText.Header)
然后直接从 resx 文件中读取文本,而不是通过我在 web.config 中定义的自定义提供程序工厂。
@Html.Raw(HttpContext.GetLocalResourceObject("UIText.resx", "Header").ToString())
工作正常,但有被字符串键入的缺点。我创建了一个扩展方法来包装它,但它仍然很丑陋:
@Html.ResourceText(() => UIText.Header)
那么,有没有办法直接使用资源属性,但让它们通过自定义提供程序路由,而不必创建我们自己的
ResXFileCodeGenerator
?
最佳答案
一个包含字符串的静态类对你有用吗?我制作了一个 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;
希望我没有完全错过它;)
关于asp.net-mvc - 通过属性名称访问资源时,是否可以更改使用的 ResourceManager?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5826822/