- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我创建了一个自定义 ResourceProvider
来从数据库中提取本地化信息。我现在想使用 DataAnnotation
向模型添加验证。
DataAnnotation
具有 ErrorMessageResourceType
和 ErrorMessageResourceName
属性,但 ErrorMessageResourceType
只接受 System.Type
(即编译后的资源文件)
有没有办法让 DataAnnotation 使用自定义 ResourceProvider?
最佳答案
我意识到这是一个老问题,但想补充一点。我发现自己处于同样的情况,并且似乎没有关于此主题的任何文档/博客。尽管如此,我想出了一种使用自定义资源提供程序的方法,但有一点需要注意。需要注意的是,我在 MVC 应用程序中,所以我仍然可以使用 HttpContext.GetLocalResourceObject()
。这是 asp.net 用来本地化项目的方法。没有资源对象不会阻止您编写我们自己的解决方案,即使它是对数据库表的直接查询。不过,我认为值得指出。
虽然我对以下解决方案不是很满意,但它似乎有效。对于我想使用的每个验证属性,我继承自所述属性并重载 IsValid()。装饰看起来像这样:
[RequiredLocalized(ErrorMessageResourceType= typeof(ClassBeginValidated), ErrorMessageResourceName="Errors.GenderRequired")]
public string FirstName { get; set; }
新属性如下所示:
public sealed class RequiredLocalized : RequiredAttribute {
public override bool IsValid(object value) {
if ( ! (ErrorMessageResourceType == null || String.IsNullOrWhiteSpace(ErrorMessageResourceName) ) ) {
this.ErrorMessage = MVC_HtmlHelpers.Localize(this.ErrorMessageResourceType, this.ErrorMessageResourceName);
this.ErrorMessageResourceType = null;
this.ErrorMessageResourceName = null;
}
return base.IsValid(value);
}
}
注意事项
(半盗用的)辅助代码看起来像这样....
public static string Localize (System.Type theType, string resourceKey) {
return Localize (theType, resourceKey, null);
}
public static string Localize (System.Type theType, string resourceKey, params object[] args) {
string resource = (HttpContext.GetLocalResourceObject(theType.FullName, resourceKey) ?? string.Empty).ToString();
return mergeTokens(resource, args);
}
private static string mergeTokens(string resource, object[] args) {
if (resource != null && args != null && args.Length > 0) {
return string.Format(resource, args);
} else {
return resource;
}
}
关于c# - 带有自定义 ResourceProvider 的 DataAnnotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1848397/
我无法将元数据类型附加到我们应用程序中自动生成的类。我测试了在生成的类中设置 Order 属性,它工作正常,但如果尝试使用另一个类,我以后将无法获取属性。 我也已经尝试了建议的解决方案 here没有成
我正在尝试使用 razor 页面验证用户以密码形式输入的内容。我有以下模型 public class UserPassword { public Guid? Id{ g
我想将 DataAnnotations 存储在数据库中。如何通过反射(或其他方式)检索 DataAnnotation 的字符串表示形式? 示例 public class Product {
我正在为我的表单使用数据注释,用户可以在其中注册他们的帐户。对于电子邮件字段,我有一个数据注释用于必填,一个用于有效电子邮件。在这里你可以在我的 View 模型中看到: [Required(E
我有一个我创建的 DataAnnotationValidator。我目前正在尝试使用 Required Field 属性对其进行测试,并且当我的属性为 null 时,我无法使 IsValid 属性失败
如何在DataFormatString中显示完整的月份名称和年份?(2014年11月) 我尝试使用这个 DataAnnotation,但它没有给我想要的 o/p: [DisplayFormat(Da
我想将 View 模型上的 DataAnnotation 设置为可通过 web.config 配置的动态值。在下面的示例中,我收到此错误“属性参数必须是属性参数类型的常量表达式、typeof 表达式或
我有一个 Entity Framework 为我生成的类: 模型/EF.tt/Product.cs public partial class X { public int Name { get;
在允许发布表单之前,是否有任何方法可以使用数据注释来比较两个表单字段(例如确认电子邮件地址)是否相同? 例如。正则表达式数据注释可以使用匹配函数来引用 ViewModel 中的另一个属性吗? 最佳答案
有人可以指向我介绍该新 namespace 的网络广播或教程/视频,以及如何使用它来帮助验证诸如用户输入之类的数据吗? 最佳答案 试试这个(对不起,不是视觉上的): ASP.NET MVC Tip #
我正在尝试在 ASP.net MVC 应用程序之外使用 DataAnnotation 属性验证。理想情况下,我想在我的控制台应用程序中使用任何模型类并将其装饰如下: private class MyE
DataAnnotations 和 Application Validation Block 有什么区别? 最佳答案 DataAnnotations 是一种基于属性的模型,用于“注释”您的数据,它位于
我正在使用 System.ComponontModel.DataAnnotations 来验证我的模型对象。如何替换消息标准属性(Required 和 StringLength)而不为每个消息提供 E
DataAnnotations 与 IDataErrorInfo 两者的优点和缺点? 一个比另一个的好处? (尤其是与 MVC 相关的) 最佳答案 因为我不想开始一个新问题,所以迟到了讨论。我的出发点
我正在尝试使用 DataAnnotations 对类执行手动验证。该应用程序是一个控制台应用程序,因此不涉及 MVC。我正在使用 .NET 4.0。 我的指导来自 this article :唯一的区
我只是期待创建一个没有连续数字重复超过五次的正则表达式,并且它应该只从 6、7、8、9 位数字开始。 我有解决方案,但我正在使用以下 2 个正则表达式并进行验证。 string startPatter
我有一个属性: [MaxLength(3)] public string State { get; set; } 在名为 State 的属性上我只希望它匹配澳大利亚的 5 个州:{ "VIC", "N
如何在不使用 MVC 库的情况下验证包含 DataAnnotations 的实体?当您在表示层中时使用 Model.IsValid 很好,但是当您想要确保模型在域/业务层中有效时怎么办?我需要一个单独
北美的日期格式是 MM/dd/yyyy 我正在为澳大利亚开发项目 (asp.net MVC 2),其中日期格式为 d/MM/yyyy 在 web.config 我有 在 views
当我们使用 EF (例如)通过 MVC , 我们可以使用 ModelState.IsValid检测 model可以通过DataAnnotations元数据与否。但是如何使用 DataAnnotatio
我是一名优秀的程序员,十分优秀!