数据注释本地化

2024-07-04

model

[MetadataType(typeof(UserMetaData))]
public class User
{
    public int Id { get; set; }
    public string UserName { get; set; }
}

public class UserMetaData
{
    public int Id { get; set; }

    [Required(ErrorMessageResourceType = typeof(Resources.ModelValidation), ErrorMessageResourceName = "UserNameRequired")]
    [LocalizedDisplayNameAttribute("UserName", NameResourceType = typeof(Resources.ModelValidation))]
    public string UserName { get; set; }
}

view

@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.UserName)
        @Html.TextBoxFor(x => x.UserName)
        @Html.ValidationMessageFor(x => x.UserName)
    </div>
    <div>
        <input type="submit" value="Gönder" />
    </div>
}

本地化显示名称属性

public class LocalizedDisplayNameAttribute : DisplayNameAttribute
{
    private PropertyInfo _nameProperty;
    private Type _resourceType;

    public LocalizedDisplayNameAttribute(string displayNameKey)
        : base(displayNameKey)
    { }

    public Type NameResourceType
    {
        get { return _resourceType; }
        set
        {
            _resourceType = value;
            //initialize nameProperty when type property is provided by setter  
            _nameProperty = _resourceType.GetProperty(base.DisplayName, BindingFlags.Static | BindingFlags.Public);
        }
    }
    public override string DisplayName
    {
        get
        {              
            //check if nameProperty is null and return original display name value  
            if (_nameProperty == null) { return base.DisplayName; }
            return (string)_nameProperty.GetValue(_nameProperty.DeclaringType, null);
        }
    }
}

资源文件

output

requiredAttribute 本地化有效,但 LocalizedDisplayNameAttribute 无效。我找不到任何解决方案来解决这个问题。

有什么建议吗,缺失在哪里?


你似乎正在用这个重新发明轮子LocalizedDisplayNameAttribute属性。此功能已内置于框架中,直接内置于[Display]您可以直接使用的属性:

public class UserMetaData
{
    public int Id { get; set; }

    [Required(ErrorMessageResourceType = typeof(Resources.ModelValidation), ErrorMessageResourceName = nameof(Resources.ModelValidation.UserNameRequired)]
    [Display(ResourceType = typeof(Resources.ModelValidation), Name = nameof(Resources.ModelValidation.UserName))]
    public string UserName { get; set; }
}

至于为什么你的轮子重塑不起作用,嗯,不能肯定地说。当你无论如何都可以摆脱它时为什么要关心它呢?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据注释本地化 的相关文章

随机推荐

  • 使用 SenchaTouch 2 只显示进度条

    我刚刚通过命令使用 Sencha Touch 2 创建了默认示例应用程序 sencha app create FirstApp D Sencha MyFirstApp all 我尝试运行index html 但它在我的chrome 中只显示
  • ProcessPoolExecutor 日志记录无法在 Windows 上登录函数内部,但在 Unix / Mac 上则不行

    当我在 Windows 计算机上运行以下脚本时 我没有看到来自log pid函数 但是当我在 Unix Mac 上运行时我会这样做 我之前读过 Windows 上的多处理与 Mac 上的不同 但我不清楚应该进行哪些更改才能使该脚本在 Win
  • 检索电子邮件的备用视图

    我似乎无法从 System Net Mail AlternateView 检索 AlternateView 我有一个通过 POP3 提取电子邮件的应用程序 我了解如何创建用于发送的备用视图 但在查看电子邮件时如何选择备用视图 我已将收到的电
  • 表格视图单元格作为按钮

    我正在尝试将已分组的表视图单元格设置为按钮 但我似乎无法在 XCode 4 2 的界面生成器中或以编程方式找到执行此操作的位置 我尝试将表视图单元格链接到 IBAction 但它只允许我创建或链接到 IBOutlet 作为临时修复 我在单元
  • tf.contrib.rnn.BasicLSTMCell 是单个 LSTM 单元还是 LSTM 层?

    在tensorflow中 有一个lstm实现称为BasicLSTMCell哪个在tf contrib rnn BasicLSTMCell 并且它有一个参数num units这意味着 LSTM 单元中的单元数 但我不知道这意味着什么 如果我像
  • 如何在 MKMapView iOS 中显示多个注释?

    我是 iOS 开发新手 我想在 iOS 中的 MKMapViewController 中显示多个注释 为此我在 viewDidLoad 方法中编写了代码 void viewDidLoad super viewDidLoad self map
  • Jquery 密码字段的默认值

    我在用这个 Jquery 插件 http mudge github com jquery example 用于使用单击时消失的文本填充输入 它对于密码字段来说并不理想 因为所有内容都显示为点 在开始输入之前使默认文本在密码字段中可见的好方法
  • 没有身份验证的 Android SyncAdapter 与 Android 服务

    我不希望对我的同步适配器使用身份验证 因为我计划使用它来同步搜索查询的 Twitter 公共时间线 我应该使用 SyncAdapter 还是任何普通服务 在此用例中 两者都可以正常工作 如果您的应用程序可能包含多个用户帐户 那么采用 Syn
  • 布局页面的下拉列表 - MVC

    我的问题 布局页面的下拉列表 我读过这篇文章 ASP NET MVC Razor 将模型传递给布局 https stackoverflow com questions 4154407 asp net mvc razor pass model
  • Angular 7 - 尝试在上传之前创建音频文件的预览

    我想要的结果是在将音频文件上传到服务器之前创建音频文件的预览 但是文件输入后 什么也没有发生 文件不会动态添加到 aduio 标记中 我也不会收到任何错误 控制台显示文件已加载 任何帮助将不胜感激 我的组件html有
  • iPhone 上的弱链接无法正常工作

    我有一个 iPhone 应用程序 主要针对 3 0 但它利用了可用的新 API 代码是这样的 if UIApplicationDidEnterBackgroundNotification NULL nc addObserver self s
  • Android 4.0 与 Canvas.clipPath 的兼容性问题

    最近 我的应用程序收到了很多评论 说 它在带有 CM9 的 Android Ice Cream Sandwich 上不起作用 我无法在运行 Android 4 0 的模拟器上重现该错误 并且由于 Android 市场的工作方式 我无法联系那
  • 如何禁用已经预订的日期?

    我有一个预订酒店房间的表格 其中有两个字段 称为入住和退房 我在这里使用 jQuery datepicker 预订房间 我不想显示那些已经预订的日期 我已经尝试过这样的 function var excludedCheckInDates C
  • iOS 8 选项卡栏项目背景颜色

    上周我一直在努力寻找解决方案 但在尝试了我能找到或想到的所有可能的解决方案后 我没有运气 我发现并尝试过的每个解决方案要么不起作用 要么已经过时 我有 5 个UITabBarItem s in a UITabBar放置在UITabBarCo
  • 如何更改时间选择器和日期选择器的文本颜色?

    目前我正在开发我的第一个应用程序 在这个应用程序中我有一个TimePicker and a DatePicker 我现在的Activity有深色背景 现在我想要一个白色的文本颜色TimePicker DatePicker 在我的布局中 我定
  • 使用 Powershell 中的 shell --eval 开关调用 MongoDB 更新时遇到问题

    我正在尝试使用 mongo exe eval 命令行开关调用 MongoDB javascript 片段 从 Windows 命令行运行时效果很好 但我想从 Powershell 脚本调用它 如下所示 Invoke Expression C
  • 在 Python 中 Ping 服务器

    在Python中 有没有办法通过ICMP ping服务器并在服务器响应时返回TRUE 如果没有响应则返回FALSE 如果您不需要支持 Windows 这里有一个非常简洁的方法 import os hostname google com ex
  • Kubernetes Pod 在具有首选模式的节点之间分布

    我正在努力将我的应用程序迁移到 Kubernetes 我正在使用 EKS 我想将我的 Pod 分布到不同的节点 以避免出现单点故障 我读到pod affinity and anti affinity and required and pre
  • 新的 LinkedIn 权限:使用 Rails LinkedIn gem 访问过去的职位和教育经历

    Linkedin 最近更新了他们的 API 在某些情况下对您可以访问的内容限制较少 但通常在您必须如何访问它方面更加明确 特别是 您必须在omniauth构建器中明确请求您想要的数据 Rails application config mid
  • 数据注释本地化

    model MetadataType typeof UserMetaData public class User public int Id get set public string UserName get set public cla