我正熟悉实体框架,我想知道是否有办法检查模型状态而不发生模型绑定。
假设我主要是从代码创建用户,在更新之前,有没有办法根据我预定义的数据注释检查以确保它是有效的?
public ActionResult Index()
{
User u = new User();
u.Username = "test";
u.Password = "test";
u.Email = "test";
DefaultContext db = new DefaultContext();
if (ModelState.IsValid)
{
db.Users.Add(u);
db.SaveChanges();
Response.Write(u.Id);
}
else
// model is not valid
return View();
}
上面的代码不起作用,因为没有绑定发生。或许我对这个过程感到困惑。
感谢。
答案 0 :(得分:18)
ModelState将不可用,因为它是由模型绑定器设置的。 ModelBinder没有绑定模型,因此它没有运行验证,因此ModelState将为空。
但这并不能阻止您使用属性和执行验证。
假设您正在使用DataAnnotation属性,则可以在没有模型绑定的情况下运行验证。
鉴于此课程:
public class Widget
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public decimal Price { get; set; }
}
你可以这样做:
var widget = new Widget
{
Id = 12,
Price = 15.57M
};
var context = new ValidationContext(widget, null, null);
var results = new List<ValidationResult>();
if( Validator.TryValidateObject( widget, context, results, true ) )
{
//Validation Successful
}
else
{
//Validation Failed
}
未设置Name属性,TryValidateObject()将失败。结果集合将发生实际错误。
答案 1 :(得分:10)
您可以使用TryValidateModel
或ValidateModel
User u = new User();
u.Username = "test";
u.Password = "test";
u.Email = "test";
if (TryValidateModel(u))
{
}else{
}