【发布时间】:2016-03-27 18:41:53
【问题描述】:
我通过覆盖 IStringLocalizerFactory 和 IStringLocalizer 创建了自己的缓存 JSON 字符串本地化程序,它的工作原理就像一个魅力。
唯一的问题是我无法本地化数据注释,因为它们似乎不适用于自定义字符串本地化器。我尝试使用应该用于这种情况的ResourceType 属性(至少就我而言),但不是使用我的IStringLocalizer,而是尝试访问属性。这可能适用于默认的resx-localizer,但不适用于自定义的。
我可以在我的班级中创建重新路由到我的IStringLocalizer 的属性,但这很麻烦,只有在必要时才想这样做。
我的视图模型:
public class RegisterViewModel
{
[Required]
[Display(Name = "test", ResourceType = typeof(Lang))]
public string Username { get; set; }
}
在我的cshtml 内部使用,如下所示:
<div class="form-group">
<label asp-for="Username" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Username" class="form-control" />
<span asp-validation-for="Username" class="text-danger"></span>
</div>
</div>
应该自动生成label 和textbox。但相反:
InvalidOperationException: Cannot retrieve property 'Name' because localization failed. Type 'Test.Models.Lang.Lang' is not public or does not contain a public static string property with the name 'test'.
轰隆隆。那是我的Lang 班级:
public class Lang
{
}
它没有通过索引器获取IStringLocalizer<Lang> 并搜索test 属性(这就是我试图让他做的事情),而是试图找到不存在的属性test。
有什么方法可以改变查找的工作方式吗?我尝试通过services.Configure() 更改MvcDataAnnotationsLocalizationOptions,但没有效果。
或者是否可以直接更改从这些数据注释生成 HTML 代码的方式?
感谢您的帮助。
【问题讨论】:
标签: c# asp.net-mvc-5 asp.net-core