W. *_*rew 6 resx data-annotations asp.net-core
我正在尝试使用ASP.NET Core MVC 2.1项目中的资源本地化来配置验证错误消息,如本文所述.
我想根据洋葱架构在我的项目中分离组件,模型是在一个单独的组件中.因此,模型名称空间与主机应用程序名称空间不同.如上所述这里,我呼吁通过完整的类型名称我的资源文件.
但是,不会根据资源文件替换模型属性的消息.
我究竟做错了什么?
模型:
using System.ComponentModel.DataAnnotations;
namespace LocalizedAspNetCoreApp.DomainModels
{
public class TestModel
{
[Display(Name = "Value")]
[Required(ErrorMessage = "ValueRequired")]
public string Value { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
Sturtup.cs:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
namespace LocalizedAspNetCoreApp.Host
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddDataAnnotationsLocalization();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseMvcWithDefaultRoute();
}
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model TestModel;
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<form method="post" asp-controller="Home" asp-action="About">
<div asp-validation-summary="ModelOnly"></div>
<div>
<label asp-for="Value"></label>
<input asp-for="Value" />
<span asp-validation-for="Value"></span>
</div>
<div>
<input type="submit" value="Save" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
对资源的路径是按照下面的模板来确定:{RootNamespace}.{ResourceLocation}.{FullTypeName - AssemblyName}其中
{RootNamespace},在大多数情况下,该类型的程序集的名称为资源被搜查,
{ResourceLocation}-这通常"Resources",
{FullTypeName - AssemblyName}是类型全名的其余部分.
您可以通过将类型IStringLocalazer<TestModel>注入控制器并使用现有资源的键访问索引器来验证这一点(例如,在您的情况下为Value).
该ResourceNotFound属性将被设置为true和SearchedLocation反映用于查找资源的路径.
因此,模型资源文件应放在同一个程序集中,其中模型由相同的路径模式描述:
LocalizedAspNetCoreApp.DomainModels/Resources/TestModel.resx
如果类型的命名空间长于Assembly的名称,则应将剩余部分添加到资源的文件名中.例如:
LocalizedAspNetCoreApp.DomainModels/Resources/Models.TestModel.resx
{ResourceLocation}默认情况下使用空字符串进行初始化.要初始化此值,请安装包Microsoft.Extensions.Localization:
install-package Microsoft.Extensions.Localization
并在Startup.cs中更改ConfigureServices方法:
public void ConfigureServices(IServiceCollection services)
{
services
.AddLocalization(opts => opts.ResourcesPath = "Resources")
.AddMvc()
.AddDataAnnotationsLocalization();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
272 次 |
| 最近记录: |