修改模型绑定后的.NET Core Razor事件



我想要实现的是能够在某些(字符串(值绑定到属性后修改它们,但它们正在.NET Core 3.1中进行验证。

示例poco类:

public class MyPoco
{
[TrimContent]
[MinLength(2)]
public string? FirstName { get; set; }

[TrimContent]
[MinLength(2)]
public string? Surname { get; set; }
[TrimContent]
[LowerCase]
public string? EmailAddress { get; set; }
}

假设一个表单被发布到MVC控制器,并且输入的值是"F";对于第一个名字;S〃;作为姓氏;My.Email@Address.Com";。它们应该被修改;F";以及";S〃;并且应该提醒MinLength=2,即:我可以避免代码中的所有CCD_ 1语句。

我的想法是,当使用";TrimContentAttribute";(以及以某种方式"更正"值的其他属性(,所有由以前的BindingSourceValueProviders设置的值,然后正在处理,但在验证生效之前。

同样,用LowerCase标记的属性应该自动为";ToLower((";,所以电子邮件地址将是";my.email@address.com&";。

因此,我们的想法是减少方法,而不是在使用实体的代码中使用所有的Trim((和ToLowerCase((方法。

到目前为止,我唯一想到的是编写一个自定义源代码,如中所述ASP.NET核心中的模型绑定-其他源。但实际上我想依赖所有默认值提供程序。

注意:客户端也有验证器在运行,但我希望在服务器端也有一个解决方案。

可以创建一个新属性

public class MinLengthWithTrim : MinLengthAttribute
{
public MinLengthWithTrim(int length) : base(length)
{
}
public override bool IsValid(object? value)
{
var str = value as string;
if (str == null)
{
return false;
}
return base.IsValid(str.Trim());
}
}

使用:

[MinLengthWithTrim(10)]
public string Name { get; set; }

最新更新