gpt4 book ai didi

asp.net-mvc - 子对象上的 ASP.NET MVC 2 模型验证 (DataAnnotations)

转载 作者:行者123 更新时间:2023-12-02 19:41:47 25 4
gpt4 key购买 nike

ASP.NET MVC 2 模型验证是否包含子对象?

我有一个来自此类的实例“Filter”:

public class Filter
{
[StringLength(5)]
String Text { get; set; }
}

在我的主要对象中:

public class MainObject
{
public Filter filter;
}

但是,当我执行 TryValidateModel(mainObject) 时,即使 MainObject.Filter.Text 中的“文本”长度超过 5 个字符,验证仍然有效。

这是故意的,还是我做错了什么?

最佳答案

两点说明:

  • 使用模型上的公共(public)属性而不是字段
  • 您尝试验证的实例需要通过模型绑定(bind)器才能正常工作

我认为第一句话不需要太多解释:

public class Filter
{
[StringLength(5)]
public String Text { get; set; }
}

public class MainObject
{
public Filter Filter { get; set; }
}

至于第二个,这是不起作用的时候:

public ActionResult Index()
{
// Here the instantiation of the model didn't go through the model binder
MainObject mo = GoFetchMainObjectSomewhere();
bool isValid = TryValidateModel(mo); // This will always be true
return View();
}

这就是它发挥作用的时候:

public ActionResult Index(MainObject mo)
{
bool isValid = TryValidateModel(mo);
return View();
}

当然,在这种情况下,您的代码可以简化为:

public ActionResult Index(MainObject mo)
{
bool isValid = ModelState.IsValid;
return View();
}

结论:您很少需要 TryValidateModel

关于asp.net-mvc - 子对象上的 ASP.NET MVC 2 模型验证 (DataAnnotations),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3218017/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com