我可以在没有模型绑定的情况下检查modelstate吗?

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

你可以使用TryValidateModelValidateModel

 User u = new User();
    u.Username = "test";
    u.Password = "test";
    u.Email = "test";


    if (TryValidateModel(u))
     {

     }else{

     }
Run Code Online (Sandbox Code Playgroud)