Razor Html.DisplayFor() 没有选择正确的本地化资源

Razor Html.DisplayFor() does not pick the right localized resource

Razor 没有根据当前的线程文化 return 本地化资源,我不知道为什么。它总是 return 中性 resx 文件中的字符串。

PurchaseOrderModel.cs:

public class PurchaseOrderModel : ProfileSpecificEntityModel {
    [Display(ResourceType = typeof(PurchaseOrderModelRes), Name = "ExpectedDeliveryOn")]
    public DateTimeOffset? ExpectedDeliveryOn { get; set; }
}

在同一个文件夹中,我有:

PurchaseOrderModelRes.resx -> 中性资源。访问修饰符设置为 "public"。 PurchaseOrderModelRes.fr.resx -> 本地化法语资源。

PurchaseOrderReport.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);
}

Startup.cs:

services.AddMvc().
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
.AddDataAnnotationsLocalization();

通过在 ResourceFilter 中设置文化而不是控制器操作解决了这个问题,正如这个线程所建议的:

现在文化在控制器和视图之间正确共享。