【问题标题】:Does Validation.IsValid() cache its results?Validation.IsValid() 是否缓存其结果?
【发布时间】:2014-06-02 16:43:29
【问题描述】:

在包含验证的典型 ASP.NET 网页页面中,会有如下内容:

if (IsPost && Validation.IsValid()) {
    // Process valid data here
}

在我的 HTML 中,我需要为某些元素添加各种类以进行演示。在那里调用 Validation.IsValid() 是否安全,还是会一遍又一遍地触发验证?

编辑:为了清楚起见,我在询问对 IsValid 的其他调用,就像在 cshtml 文件中的某处:

<input type="text" class="forminput @(Validation.IsValid() ? "" : "error")" />

【问题讨论】:

  • 当您添加 IsPost 条件时,它将为每个回帖触发
  • 对不起,如果问题不清楚。这是关于在同一页面上对 IsValid() 的后续调用。
  • 所以你担心调用这个方法时,验证背后的代码是否会再次完全运行?那么只需将一次调用的结果放入一个变量中,然后在您的条件中使用该变量......
  • 是的,这将是一个解决方案。问题是首先是否存在问题 - IsValid() 是否一遍又一遍地执行验证?

标签: validation asp.net-webpages


【解决方案1】:

在不带任何参数的情况下调用Validation.IsValid() 会导致每个 表单字段在每次调用该方法时检查验证错误。如果在上一次调用中已将条目添加到 ModelState 字典中,则它在后续调用中仍然存在 - 假设在调用之间没有 Postback,这当然会清除所有状态。

您可以通过将名称传递给方法来限制检查的字段数量:

if(Validation.IsValid("Email")){
    // will only examine the form field named "Email"
}

【讨论】:

  • 所以我需要定义一些自定义变量并根据它来决定?我可能会,因为我还没有找到像Validation.WasValidLastTime 这样的属性。
  • 如果你想不顾以前调用Validation.IsValid 的结果而继续前进,那么是的,我想你将不得不使用另一种方法。如果IsValid 之前返回了false,它将继续这样做。但我认为你把事情复杂化了。看看我关于验证系统如何在网页中工作的文章,尤其是 Validation.ClassFor 的工作原理:mikesdotnetting.com/Article/191/Validation-In-Razor-Web-Pages-2
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-28
相关资源
最近更新 更多