Asp.net mvc Asp.Net MVC 2-更改PropertyValueRequired字符串

Asp.net mvc Asp.Net MVC 2-更改PropertyValueRequired字符串,asp.net-mvc,asp.net-mvc-2,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 2,Asp.net Mvc 3,使用App_GlobalResources目录中的resx文件,我已经能够更改模型验证器的PropertyValueInvalid字符串的默认消息 但是当需要值(PropertyValueRequired)时,转换消息不起作用 在Global.asax.cs应用程序_Start()中,我更改了资源类键,如下所示: DefaultModelBinder.ResourceClassKey = "Messages"; 在Messages.resx文件中,我添加了两个条目: “PropertyVal

使用App_GlobalResources目录中的resx文件,我已经能够更改模型验证器的PropertyValueInvalid字符串的默认消息

但是当需要值(PropertyValueRequired)时,转换消息不起作用

在Global.asax.cs应用程序_Start()中,我更改了资源类键,如下所示:

DefaultModelBinder.ResourceClassKey = "Messages";
在Messages.resx文件中,我添加了两个条目:

  • “PropertyValue无效”=>“O valor'{0}'éinválido para O campo{1}。”
  • “PropertyValueRequired”=>“Énecessário digitar o{0}。”

谢谢。

此消息被烘焙到
System.ComponentModel.DataAnnotations
程序集中,位于键
RequiredAttribute\u ValidationError
下。您可以编写自定义验证属性:

public class MyRequiredAttribute : RequiredAttribute
{
    public MyRequiredAttribute()
    {
        ErrorMessageResourceType = typeof(Messages);
        ErrorMessageResourceName = "Required";
    }
}
public class MyViewModel
{
    [MyRequired]
    public int Foo { get; set; }
}
然后在
Messages.resx
文件中定义所需的
字符串:

Required => É necessário digitar o {0}.
最后,使用此自定义属性装饰视图模型属性:

public class MyRequiredAttribute : RequiredAttribute
{
    public MyRequiredAttribute()
    {
        ErrorMessageResourceType = typeof(Messages);
        ErrorMessageResourceName = "Required";
    }
}
public class MyViewModel
{
    [MyRequired]
    public int Foo { get; set; }
}
怎么样

[Required (ErrorMessageResourceName="Required",ErrorMessageResourceType=typeof(Messages)]

public string Foo { get; set; }

Required => É necessário digitar o {0}.

请参阅下面的链接以获取完整的asp.net mvc本地化指南

未使用DefaultModelBinder.GetValueRequiredResource的RequiredAttribute。 创建自定义DataAnnotationsModelValidator类

public class MyRequiredAttributeAdapter : RequiredAttributeAdapter
{
  public MyRequiredAttributeAdapter(ModelMetadata metadata, 
                                    ControllerContext context, 
                                    RequiredAttribute attribute) 
         : base(metadata, context, attribute)
  {
    attribute.ErrorMessageResourceType = typeof (Messages);
    attribute.ErrorMessageResourceName = "PropertyValueRequired";
  }
}
并在Global.asax中注册适配器

DataAnnotationsModelValidatorProvider.RegisterAdapter(
    typeof(RequiredAttribute), 
    typeof(MyRequiredAttributeAdapter));
希望这有帮助

只需像这样添加

[Required(ErrorMessage = "Your Error Message, here..!")]

我注意到了同样的行为。解决方案有人吗?@mare您的确切问题是什么-在使用数据注释的模式验证中,resx文件中未使用PropertyValueRequired消息?是的,与daniel的问题完全相同。您尝试过我下面的解决方案吗?我想Darin的更好一点,这是对您的解决方案的升级。因此,对于相同的概念,ASP.NET MVC团队正在使用两种不同的构造?@mare,我们只希望在将来的MVC版本中,这一点会得到修复/变得更容易。要在ASP.NET MVC 3中在客户端工作,您需要注册自定义属性()或使用AttributeAdapter方法()这正是我一直在寻找的,谢谢!(附:链接断开了)这是我在这个问题上找到的最好的答案。这很好。另外,请参阅本文,了解存储DataAnnotationsModelValidator类的最佳实践位置在哪里?这需要什么名称空间(使用)?如何使其全局化,从而不需要添加(ErrorMessageResourceName=“Required”,ErrorMessageResourceType=typeof(Messages)。或如何使字段的错误消息需要一个整数值,但用户输入“abc”不确定您的意思-使其成为全局,但对于整数值错误消息-这有帮助吗?