ASP.Net MVC模型中的全局资源ErrorMessage属性

本文关键字:全局 资源 ErrorMessage 属性 Net MVC 模型 ASP | 更新日期: 2023-09-27 18:35:05

我正在ASP.Net MVC 5中创建web应用程序。

我需要添加用户定义的语言。(所以,它可以用任何语言(。

我已经在资源文件中添加了英文文本/消息。

而对于其他语言,资源将在运行时在App_GlobalResources文件夹中生成。

有了这些自定义资源,我可以根据所选语言显示标签(、按钮等(。

但是,我对ErrorMessage有问题,它是作为模型属性中的属性给出的。

模型类在类库中,并且在MVC中添加了类库项目的引用。

因此,无法访问App_GlobalResources文件夹中的资源。

并且,如果我在模型类的Project下添加资源,我可以用以下代码给出自定义消息。

    [Required(ErrorMessage = "*")]
    [System.Web.Mvc.Compare("Password", ErrorMessageResourceType = typeof(Resources), ErrorMessageResourceName = "PasswordCompare")]
    public string ConfirmPassword { get; set; }

但是,使用此代码,我无法使用App_GlobalResources。

在这种情况下,解决方案是什么?

ASP.Net MVC模型中的全局资源ErrorMessage属性

最后,我得到了解决方案:

已创建自定义属性类。

    [Required(ErrorMessage = "*")]
    [CompareCustomAttribute("Password", ClassKey = "Resources", ResourceKey = "PasswordCompare")]
    public string ConfirmPassword { get; set; }

自定义属性类正在继承CompareAttribute类。

public sealed class CompareCustomAttribute : System.Web.Mvc.CompareAttribute
{
    public CompareCustomAttribute(string otherProperty)
        : base(otherProperty)
    {
    }
    public string ResourceKey { get; set; }
    public string ClassKey { get; set; }
    public override string FormatErrorMessage(string name)
    {
        return Convert.ToString(HttpContext.GetGlobalResourceObject(this.ClassKey, this.ResourceKey));
    }
}

在重写的FormatErrorMessage方法中,我放入了从全局资源获取自定义错误消息的代码。