0

假设我有以下模型:

型号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 吗?

4

0 回答 0