我是MVC的新手,所以这个问题可能很天真
我知道你可以为模型属性添加验证属性,框架将提供适当的服务器端和客户端验证。但是我被迫使用遗留数据库结构,其中模型中的一个属性是“int”或“串” 并且其他属性(Value)数据类型由第一个属性确定。这意味着我无法使用Annotations进行验证。但是,在从数据库中获取值并构建模型类之后,是否有任何简单的方法以编程方式“注释”属性。如果可以这样做,那么它将进行有效(客户端)验证而不会有太多麻烦。 感谢
答案 0 :(得分:3)
This answer显示了一种在运行时注入属性的方法。 Another answer显示了如何使用有时仅进行检查的验证。
在您的情况下,进行基于模型的验证非常容易。
对于服务器端验证:
public class MyModel: IValidatableObject
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public IEnumerable<ValidationResult>
Validate(ValidationContext validationContext)
{
var relevantFields = new [] {"Prop2"};
if (Prop1 == "Int" && NotValidInt(Prop2))
yield return new ValidationResult("Prop2 must be convertable to int", relevantFields);
else if (prop1 == "String" && NotValidString(Prop2))
yield return new ValidationResult("Prop2 must be convertible to string", relevantFields);
}
}
对于客户端验证,它涉及的更多一些,但详细信息可在此处获取:
有关服务器端验证的详细信息,请参阅免费Pluralsight training on validation的自定义验证部分。
答案 1 :(得分:2)
您正在考虑将您的数据库视为MVC中的M的正常新手错误。任何非平凡的应用程序都要求您从视图模型中分离数据库模型。因此,将您的属性应用于视图模型,然后在正确验证视图时使用业务逻辑将值复制到数据库模型。
MVC是一个用户界面模式,数据库不属于它...我知道,太阳下的每个示例应用程序都会将您的数据对象传递给视图,但这不是应该完成的方式。