c# - Razor Html.DisplayFor() 没有选择正确的本地化资源
问题描述
Razor 不会根据当前线程文化返回本地化资源,我不知道为什么。它总是返回中性 resx 文件中的字符串。
PurchaseOrderModel.cs:
public class PurchaseOrderModel : ProfileSpecificEntityModel {
[Display(ResourceType = typeof(PurchaseOrderModelRes), Name = "ExpectedDeliveryOn")]
public DateTimeOffset? ExpectedDeliveryOn { get; set; }
}
在同一个文件夹中,我有:
PurchaseOrderModelRes.resx
-> 中性资源。访问修饰符设置为“public”。
PurchaseOrderModelRes.fr.resx
-> 本地化的法语资源。
采购订单报告.cs:
<div>@Html.DisplayNameFor(purchaseOrder => purchaseOrder.ExpectedDeliveryOn)</div>
PurchaseOrderController.cs:
[HttpGet]
public async Task<IActionResult> PurchaseOrdersReportAsync([FromQuery] PurchaseOrderListQueryOptionsModel queryOptions) {
CultureInfo.CurrentCulture = CultureInfo.GetCultureInfo("fr"); //Should use *.fr.resx files.
CultureInfo.CurrentUICulture = CultureInfo.GetCultureInfo("fr");
PaginatedList<PurchaseOrder> purchaseOrders = await _purchaseOrderService.GetPurchaseOrdersAsync(CurrentUser, queryOptions.ToQueryOptions());
PaginatedListModel<PurchaseOrderModel> purchaseOrderModels = _paginatedListModelConverter.Convert(purchaseOrders, p => _purchaseOrderModelConverter.Convert(p));
return View("PurchaseOrderReport", purchaseOrderModels.Items);
}
启动.cs:
services.AddMvc().
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();
解决方案
通过在 ResourceFilter 中设置区域性而不是控制器操作来解决问题,正如此线程所建议的:ASP.NET MVC (Async) CurrentCulture is not shared between Controller and View
现在文化在控制器和视图之间正确共享。
推荐阅读
- go - 将非常大的 json 解码为结构数组
- flutter - Flutter 如何在 ListTile 上获取弹出菜单?
- python - 如何同时从多个范围内采样 K 个整数?
- excel - 按日期计算的每日动态平均订单数 - 包括今天()
- ios - 单击网站链接时如何打开应用程序(Firebase 动态链接)
- linux - 使用用户输入搜索日志的 Linux shell 脚本
- elasticsearch - JAVA_HOME 指向 ElasticSearch 安装期间的无效安装
- mysql - 如何仅对 MySQL 中的数据子集强制执行区分大小写的唯一索引?
- reactjs - 从窗口获取路径名并将其存储在状态中以在 fetch 函数中使用
- ruby-on-rails - 如何从 Rails 中的 f.select 中删除 Null 值?