Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 替换metadataattribute中的regularexpression字符串_.net_Razor_Model View Controller - Fatal编程技术网

.net 替换metadataattribute中的regularexpression字符串

.net 替换metadataattribute中的regularexpression字符串,.net,razor,model-view-controller,.net,Razor,Model View Controller,我正在编写一个应用程序,从数据库加载语言文本以实现国际化,使用viewmodels中的键查找正确的文本。我已从修改了MyLocalizationprovider的一个版本,修改后的代码可在此处找到:。代码遍历元数据属性并替换标题显示名、占位符提示、errormessage errormessage和validation errormessage errormessage。我正在获取ErrorMessage的DisplayAttribute、Prompt和Name以及ErrorMessage的Va

我正在编写一个应用程序,从数据库加载语言文本以实现国际化,使用viewmodels中的键查找正确的文本。我已从修改了MyLocalizationprovider的一个版本,修改后的代码可在此处找到:。代码遍历元数据属性并替换标题显示名、占位符提示、errormessage errormessage和validation errormessage errormessage。我正在获取ErrorMessage的DisplayAttribute、Prompt和Name以及ErrorMessage的ValidationAttribute,以便在两个字段之间进行验证,在本例中为密码。我得到的钥匙是这样的:

if (typeName.Equals("DisplayAttribute"))
{
    nameKey = ((DisplayAttribute) attr).Name;
    placeholderKey = ((DisplayAttribute) attr).Prompt;
...
然后用数据库中的值替换键。我的viewmodels如下所示:

[Required(ErrorMessage = "changepassword_newpassword_error")]
[DataType(DataType.Password)]
[Display(Prompt = "changepassword_newpassword_placeholder", Name = "changepassword_newpassword_headline")]
[RegularExpression(@"^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,12}", ErrorMessage = "changepassword_newpassword_regexerror")]
public string NewPassword { get; set; }
这适用于占位符、标题、字段的错误消息和验证,但是我还不知道如何找到RegularExpression。我以为它会像它的ErrorMessage一样存在于ValidationAttribute中,但我在那里找不到任何东西。看

哪里可以找到regularexpression字符串的字段,它是否存在?
或者我应该试着写我自己的属性,比如,如果是的话,有人能帮我吗

经过进一步的搜索,我找到了更多的答案,从而找到了一个可行的解决方案

首先,我没有监听ValidationAttribute,这是一个很大的attributeclass,而是沿着链条往下搜索RequiredAttribute和CompareAttribute,以及DisplayAttribute。通过这些,我可以找到输入字段的比较错误、必填错误以及标题和占位符

我发现存在一个RegularExpressionAttribute,在那里我可以找到字段模式,尽管我只能获取值,不能设置值。解决方案是实现一个自定义RegularExpressionAttribute类,该类继承自ValidationAttribute,非常类似于。使用它虽然不起作用,但因为它没有返回任何validationerrors。解决方案是从IclientValidate继承。请参阅下面的完整代码

public class CustomRegularExpressionValidateAttribute : ValidationAttribute, IClientValidatable
{
    public string Pattern { get; set; }

    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var password = (string)value;
        var match = Regex.Match(password, Pattern);
        if (!match.Success)
        {
            return new ValidationResult(this.FormatErrorMessage(validationContext.DisplayName));
        }

        return null;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRegexRule(FormatErrorMessage(metadata.GetDisplayName()), Pattern);
    }

}
现在整个链条都能工作了。我希望这可能对某人有所帮助

[CustomRegularExpressionValidate(Pattern = "PasswordRegex", ErrorMessage = "changepassword_newpassword_regexerror")]