假设我有以下模型:
型号1:
public class Model1
{
[Required(ErrorMessageResourceType = typeof (Resource), ErrorMessageResourceName = "RequiredParameter")]
[Display(Name = "Name", ResourceType = typeof (Resource))]
public string Name { get; set; }
[Required(ErrorMessageResourceType = typeof (Resource), ErrorMessageResourceName = "RequiredParameter")]
[Display(Name = "Description", ResourceType = typeof (Resource))]
public string Description { get; set; }
public Model2 Model2 { get; set; }
public Model1()
{
Model2 = new Model2();
}
}
型号2:
public class Model2
{
[Required(ErrorMessageResourceType = typeof (Resource), ErrorMessageResourceName = "RequiredParameter")]
[Display(Name = "Name", ResourceType = typeof (Resource))]
public string TestValue { get; set; }
}
控制器:
[HttpGet]
public ActionResult TestValidation()
{
var obj = new Model1();
return View(obj);
}
[HttpPost]
public ActionResult TestValidation(Model1 obj)
{
if (ModelState.IsValid)
{
return Content("valid");
}
return Content("Invalid");
}
当我尝试验证模型 1 时,我的行为很奇怪。
你可以看到我所有的属性都有字符串类型。
我不知道为什么模型只针对一级而不是二级验证。
如果 Model2 中的 TestValue 为空,我有 ModelState.IsValid = true,但如果我有来自 Model1 的名称或描述为空值,我将有 ModelState.IsVlaid = false。
看起来 [Required] 属性仅适用于第一级(模型 1)而不适用于第二级(模型 2)。
为什么我会有这种奇怪的行为?
更新
public class Model1
{
[Required]
public string Name { get; set; }
[Required]
public string Description { get; set; }
public Model2 Model2 { get; set; }
}
public class Model2
{
[Required]
public string TestValue { get; set; }
}
使用我上面的模型,我得到了预期的验证。我需要像上面那样使用验证工作和 Model2 吗?