c# - 替换属性值的数据注释?

标签 c# asp.net-mvc asp.net-mvc-3 data-annotations

是否可以使用数据注释属性来操作文本并在操作后返回一个新文本?

例如,我想验证一个字符串属性是否具有特殊字符或单词之间的多个空格,然后返回一个新字符串来替换原始属性的值。

使用数据注释有多大可能?

最佳答案

回答有点晚(2 年!),但是您可以修改在自定义 DataAnnotations 属性中验证的值。关键是覆盖 IsValid(Object, ValidationContext) ValidationAttribute 方法并执行一些反射魔法:

public class MyCustomValidationAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext ctx)
    {
        // get the property
        var prop = ctx.ObjectType.GetProperty(ctx.MemberName);

        // get the current value (assuming it's a string property)
        var oldVal = prop.GetValue(ctx.ObjectInstance) as string;

        // create a new value, perhaps by manipulating the current one
        var newVal = "???";

        // set the new value
        prop.SetValue(ctx.ObjectInstance, newVal);

        return base.IsValid(value, ctx);
    }
}

关于c# - 替换属性值的数据注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15541199/

相关文章:

c# - 为什么 MSDN 建议在委托(delegate)声明中包含对象发送者?

c# - WinRT 应用程序中的 DRY

c# - 将 Razor View 渲染为字符串会导致额外的格式标记(制表符、换行符)?如何去除?

c# - MVC3 锁定成员(member)用户

c# - 表单上的三个面板布局

c# - 如何使 autofac KeyFilter 在 asp.net-core web api 中工作?

c# - 动态修改 RouteValueDictionary

asp.net-mvc - 验证包含嵌套域对象的 Viewmodel

c# - 在 Razor View 中以 byte[] 形式发送文件

javascript - 用于纯 jquery/javascript 的 ibm watson 语音到文本 api