Die*_*xel 15 c# asp.net-mvc entity entity-framework data-annotations
我正熟悉实体框架,我想知道是否有办法检查模型状态而不发生模型绑定.
假设我主要是从代码创建用户,在更新之前,有没有办法让我检查以确保它是否有效根据我预定义的数据注释?
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();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用,因为没有绑定发生.或许我对这个过程很困惑.
谢谢.
Nat*_*iff 20
ModelState将不可用,因为它是由模型绑定器设置的.ModelBinder没有绑定模型,因此它没有运行验证,因此ModelState将为空.
但这并不能阻止您使用属性和执行验证.
假设您正在使用DataAnnotation属性,则可以在不使用模型绑定的情况下运行验证.
鉴于此类:
public class Widget
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
public decimal Price { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
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
}
Run Code Online (Sandbox Code Playgroud)
未设置Name属性,TryValidateObject()将失败.结果集合将发生实际错误.
Jay*_*ena 10
你可以使用TryValidateModel 或ValidateModel
User u = new User();
u.Username = "test";
u.Password = "test";
u.Email = "test";
if (TryValidateModel(u))
{
}else{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4867 次 |
| 最近记录: |