asp.net-mvc – 更改ASP.NET MVC 3中的默认ModelState错误消息
|
我将资源文件放在单独的程序集MyApp.Resources.dll中.我可以毫无问题地使用资源,但是当我想更改(本地化)默认验证消息时会出现问题: “{0}字段是必需的.”和“值'{0}’对{1}无效.” solution DefaultModelBinder.ResourceClassKey =“MyApp.Resources.Global”;不起作用,因为它要求ResourceClassKey位于Web项目中的App_GlobalResources文件夹下. 应该为我解决什么? 问候 解决方法我找到了这种情况的解决方案(当资源处于单独的程序集中时).为了使它工作,您应该创建自定义ResourceProviderFactory并将其注册为< globalization>中的默认ResourceProviderFactoryType. web.config部分. 设置本地化 // Modify web.config in run-time and setup custom ResourceProviderFactory
var globalization = WebConfigurationManager.GetSection("system.web/globalization") as GlobalizationSection;
var readonlyField = typeof(ConfigurationElement).GetField("_bReadOnly",BindingFlags.Instance | BindingFlags.NonPublic);
readonlyField.SetValue(globalization,false);
globalization.ResourceProviderFactoryType = typeof(ValidationResourceProviderFactory).FullName;
var resourcesClass = typeof(ValidationResources).FullName;
DefaultModelBinder.ResourceClassKey = resourcesClass;
ValidationExtensions.ResourceClassKey = resourcesClass;
ValidationResourceProviderFactory public sealed class ValidationResourceProviderFactory: System.Web.Compilation.ResourceProviderFactory
{
public ValidationResourceProviderFactory()
{
}
public override IResourceProvider CreateGlobalResourceProvider(string classKey)
{
return new GlobalResourceProvider(classKey);
}
public override IResourceProvider CreateLocalResourceProvider(string virtualPath)
{
throw new NotImplementedException("Local resources are not supported yet");
}
}
GlobalResourceProvider public class GlobalResourceProvider : IResourceProvider
{
public GlobalResourceProvider(string classKey)
{
Throw.IfBadArgument(() => String.IsNullOrEmpty(classKey),"classKey");
var type = Type.GetType(classKey,false);
if (type == null)
{
var asmName = classKey;
var className = classKey;
while(asmName.IndexOf(".") > -1 && type == null)
{
asmName = asmName.Substring (0,asmName.LastIndexOf("."));
className = classKey.Substring(asmName.Length + 1);
type = Type.GetType(classKey + "," + asmName,false);
}
}
Throw.IfNullArgument(type,"type");
Manager = CreateResourceManager(classKey,type.Assembly);
}
public ResourceManager Manager { get; set; }
#region IResourceProvider implementation
public IResourceReader ResourceReader { get; set; }
public object GetObject(string resourceKey,CultureInfo culture)
{
return Manager.GetObject(resourceKey,culture);
}
#endregion
private ResourceManager CreateResourceManager(string classKey,Assembly assembly)
{
return new ResourceManager(classKey,assembly);
}
}
UPD RESidation for ValidationResources 只需将新资源类添加为ValidationResources并在其中放置提供的XML <?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<!-- Schema definited removed -->
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader,System.Windows.Forms,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter,PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Accept" xml:space="preserve">
<value>Please enter a value with a valid mimetype.</value>
</data>
<data name="Creditcard" xml:space="preserve">
<value>Please enter a valid credit card number.</value>
</data>
<data name="Date" xml:space="preserve">
<value>Please enter a valid date.</value>
</data>
<data name="DateISO" xml:space="preserve">
<value>Please enter a valid date (ISO).</value>
</data>
<data name="DateTime" xml:space="preserve">
<value>Please enter a valid date and time.</value>
</data>
<data name="Digits" xml:space="preserve">
<value>Please enter only digits.</value>
</data>
<data name="Email" xml:space="preserve">
<value>Please enter a valid email address.</value>
</data>
<data name="EqualTo" xml:space="preserve">
<value>Please enter the same value again.</value>
</data>
<data name="FieldMustBeDate" xml:space="preserve">
<value>Please enter a valid date for "{0}".</value>
<comment>Localization for legacy MVC ClientDataTypeModelValidatorProvider</comment>
</data>
<data name="FieldMustBeNumeric" xml:space="preserve">
<value>Please enter a valid number for "{0}".</value>
<comment>Localization for legacy MVC ClientDataTypeModelValidatorProvider</comment>
</data>
<data name="InvalidPropertyValue" xml:space="preserve">
<value>Invalid property value: {0}</value>
</data>
<data name="Max" xml:space="preserve">
<value>Please enter a value less than or equal to {0}.</value>
</data>
<data name="MaxLength" xml:space="preserve">
<value>Please enter no more than {0} characters.</value>
</data>
<data name="Min" xml:space="preserve">
<value>Please enter a value greater than or equal to {0}.</value>
</data>
<data name="MinLength" xml:space="preserve">
<value>Please enter at least {0} characters.</value>
</data>
<data name="Number" xml:space="preserve">
<value>Please enter a valid number.</value>
</data>
<data name="PropertyValueInvalid" xml:space="preserve">
<value>The value "{0}" is invalid for the property "{1}"</value>
<comment>Localization for legacy MVC DefaultModelBinder</comment>
</data>
<data name="PropertyValueRequired" xml:space="preserve">
<value>The "{0}" field is required.</value>
<comment>Localization for legacy MVC DefaultModelBinder</comment>
</data>
<data name="Range" xml:space="preserve">
<value>Please enter a value between {1} and {2}.</value>
</data>
<data name="RangeClient" xml:space="preserve">
<value>Please enter a value between {0} and {1}.</value>
</data>
<data name="RangeLength" xml:space="preserve">
<value>Please enter a value between {0} and {1} characters long.</value>
</data>
<data name="Remote" xml:space="preserve">
<value>Please fix this field.</value>
</data>
<data name="SignedInt" xml:space="preserve">
<value>Please enter an integer value,sign allowed.</value>
</data>
<data name="Time" xml:space="preserve">
<value>Please enter a valid time.</value>
</data>
<data name="UnsignedInt" xml:space="preserve">
<value>Please enter a positive integer value.</value>
</data>
<data name="Url" xml:space="preserve">
<value>Please enter a valid URL.</value>
</data>
<data name="ValueNull" xml:space="preserve">
<value><null></value>
</data>
</root> (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 应该在ASP.NET页面中完成哪些操作?
- asp.net – 当HTTPContext .Current为Nothing时如何使用Ser
- asp.net核心 – 为什么验证类型 – .NET Core中的Web API的
- 天蓝色 – 不在托管服务或开发结构中运行(生产,而不是调试/
- ASP.NET MVC 5和Bootstrap 3
- 在ASP.NET MVC中使用Razor创建可重用的HTML视图组件
- asp.net – 尝试为.mdf文件附加自动命名的数据库失败
- asp.net-mvc – 为什么被赋予NoValidate属性?
- asp.net app中的会话变量超时
- asp.net – 是否有支持请求参数连接的URL构建器?
- asp.net – 允许文本框中的HTML
- asp.net-mvc – ASP.NET MVC 4中的Windows身份验
- asp.net-mvc – 如何在ASP.NET MVC 3中更新复杂模
- asp.net – 什么时候应该使用Page.DataBind()和C
- asp.net-mvc – Visual Studio找不到自定义工具R
- asp.net – 如何打破VB.NET中的“if”块
- asp.net-mvc – 使用ASP.NET MVC中绝对路径访问视
- asp.net – 调试时编辑源代码
- asp.net – 元素’system.webServer’有无效的子
- 如何使用asp.net webapi获取Json Post Values
