从基础模型覆盖验证属性

时间:2012-02-14 13:38:36

标签: asp.net asp.net-mvc asp.net-mvc-3

我有一个名为MyController的MVC控制器,其中包含一个名为MyAction的动作。另一方面,我有一个名为MyModel的模型,所有这些类都在一个名为Portal.Website(Asp.net MVC3应用程序)的项目中,我将其用作通用网站,并存储我将在其中添加的自定义网站的常用功能。将来

另一方面,我有另一个网站项目,其中引用了名为Portal.Website.MyCustomWebsite的Portal.Website项目。

这是通用网站部分中的viewmodel MyModel.cs:

namespace Portal.Website
{
    public class MyModel
    {
        [Required(ErrorMessage="The field Name is required.")]
        [Display("MyPropertyOriginal")]
        public virtual string Name{get;set;}
    }
}

这是通用网站部分中的控制器和操作:

namespace Portal.Website
{
    public class MyController: Controller
    {
       [HttpPost]
       public ActionResult MyAction(MyModel model)
       {
          if(Model.IsValid)
          ....
          //My issue: Im getting the error message in english, not the overridden one.

       }
    }
}

这是我在自定义部分中创建的视图模型:

namespace Portal.Website.MyCustomWebsite
{
    public class MyModel: MyModel
    {
        [Required(ErrorMessage="My error message in other language.")]
        [Display("MyPropertyOverriden")]
        public override string Name{get;set;}
    }
}

我的问题:

我想覆盖Required属性的ErrorMessage。出于这个原因,我在自定义项目中创建了一个新模型。另一方面,我想使用已在我的公共部分中定义的Controller / Action(MyController / MyAction)。

你知道这是否可能吗?我只得到了必需属性的问题,但显示一个它的工作完美。

提前致谢。 映入眼帘。 何。

2 个答案:

答案 0 :(得分:1)

MVC3对I18N(国际化)的支持比它的前辈更好 - 您可以传递RequiredAttribute资源类的类型和资源键,错误消息将以最合适的语言显示:

[Required(ErrorMessageResourceType = typeof(MyResources), ErrorMessageResourceName = "ResourceKey")]
public override string Name { get; set; }

答案 1 :(得分:1)

您可能需要查看本文,其中提出了两种可能的解决方案:

http://www.codeproject.com/Articles/130586/Simplified-localization-for-DataAnnotations

我发现用自定义逻辑重新创建一些DataAnnotation类更有意义。