C# asp.net mvc问题在IValidatableObject方法中的验证

C# asp.net mvc问题在IValidatableObject方法中的验证,c#,validation,asp.net-mvc-5,validationsummary,ivalidatableobject,C#,Validation,Asp.net Mvc 5,Validationsummary,Ivalidatableobject,我正在asp.net mvc-5中创建一个web应用程序 我正在使用IValidatableObject接口进行验证 这是我的模特的样子 public class LicenseInfo : IValidatableObject { public int LicenseId { get; set; } //other properties public IEnumerable<ValidationResult> Validate(ValidationCont

我正在asp.net mvc-5中创建一个web应用程序

我正在使用IValidatableObject接口进行验证

这是我的模特的样子

public class LicenseInfo : IValidatableObject
{
    public int LicenseId { get; set; }
    //other properties

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        //Validate class which will be called on submit
    }
}

当my
LicenseId=0
时,我的验证不起作用,控制器上的调试器直接执行,但当my
LicenseId>0
时,我的验证方法正在执行。

您需要在控制器方法中手动添加验证

[HttpPost]
public ActionResult _AddEditLicense(LicenseInfo data)
{
   if (ModelState.IsValid)
   {
      // Execute code
   }

   // Not validated, return to the view
   return View(data);
}
编辑

嗯,0是int的有效值,即使它不代表下拉列表中的任何内容。
尝试将其更改为int?,那么默认值将为null,并且应该更容易在模型验证中捕获它。

我实际上在我的控制器方法中添加了ModelState.IsValid,主要的混淆是,只有当
LicenseId=0
时,它才起作用,在其他情况下,验证函数执行请参见我的编辑。另外,你应该向我们展示你的验证方法是什么样的。
[HttpPost]
public ActionResult _AddEditLicense(LicenseInfo data)
{
    if (ModelState.IsValid)
    {
        //execution
    }
}
[HttpPost]
public ActionResult _AddEditLicense(LicenseInfo data)
{
   if (ModelState.IsValid)
   {
      // Execute code
   }

   // Not validated, return to the view
   return View(data);
}