c# - 使用自定义功能覆盖 MVC 模型显示名称注释

标签 c# asp.net-mvc asp.net-mvc-4 data-annotations modelstate

我有以下从键值 XML 文件中读取的方法。我传入一个键并返回一个值,该值用于显示在我的 View 中。

public static class TextManager
{
    public static string GetValue(string key)
    {
        string returnVal = null; 
        XmlSerializer serializer = new XmlSerializer(typeof(Entries));
        string path = HttpContext.Current.Server.MapPath("/App_Data/text-key-value.xml");
        if (File.Exists(path))
        {
            Entries entries = (Entries)serializer.Deserialize(File.OpenRead(path));
            var entry = entries.Where(u => u.Key == key).FirstOrDefault();
            if (entry != null)
            {
                returnVal = entry.Value;
            }
        }
        return returnVal;
    }
}

基本上,我希望能够在我的模型类中使用此方法作为数据注释,它将直接从我的站点文本文件中提取并设置为显示名称属性。

比如我要替换

[Display(Name = "Reference Code")]
public string ReferenceCode { get; set; }

有了这个

[DisplaySiteText("ReferenceCodeKey")]
public string ReferenceCode { get; set; }

DisplaySiteText 会将字符串引用“ReferenceCodeKey”传递给 GetValue 方法,将引用归档到文件中,然后将标准显示名称属性设置为文件中的任何内容。

我如何创建自己的自定义模型注释来执行此操作,我过去通过创建一个继承自 ValidationAttribute 的类来编写自定义验证注释,但我认为这在这种情况下不起作用。

最佳答案

为此,您可以继承 DisplayNameAttribute

public class DisplaySiteTextAttribute : DisplayNameAttribute
{
    private string _key;

    public DisplaySiteTextAttribute(string key)
    {
        _key = key;
    }

    public override string DisplayName
    {
        get
        {
            return TextManager.GetValue(_key);
        }
    }
}

关于c# - 使用自定义功能覆盖 MVC 模型显示名称注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57416242/

相关文章:

c# - 如何解决此 Microsoft.Office.Excel 方法调用中的歧义?

c# - 在 .NET 中组合多个 PNG8 图像的最简单方法

asp.net - 尝试使用 VS 2012 打开我的 asp.net 4.5 MVC Web 应用程序时出错。Asp.net 尚未在服务器上注册

sql - Linq to SQL Group by 和 Sum in Select

c# - 在遵循数据库优先方法时,使用 [NotMapped] 将附加信息传递给 View

javascript - 删除并刷新后 Cookie 仍然存在

jquery - 将复杂类型从 jquery 发布到 mvc

c# - 使用insert方法绕过sql注入(inject)

asp.net - ASP.NET MVC4 是否为 HTML5 控件提供向后兼容性支持?

c# - IIS 上的 SOA/web 服务 : Java on Tomcat or C# (. NET)?