Validation.IsValid()是否缓存其结果?

Validation.IsValid()是否缓存其结果?,validation,asp.net-webpages,Validation,Asp.net Webpages,在包含验证的典型ASP.NET网页中,将有以下内容: if (IsPost && Validation.IsValid()) { // Process valid data here } 在我的HTML中,我需要将各种类添加到某些元素中以用于表示。在那里调用Validation.IsValid()安全吗?还是会一次又一次地触发验证 编辑:为了说明这一点,我询问了对IsValid的其他调用,比如cshtml文件下面的某个地方: <input type="text"

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

if (IsPost && Validation.IsValid()) {
    // Process valid data here
}
在我的HTML中,我需要将各种类添加到某些元素中以用于表示。在那里调用Validation.IsValid()安全吗?还是会一次又一次地触发验证

编辑:为了说明这一点,我询问了对IsValid的其他调用,比如cshtml文件下面的某个地方:

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

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

通过将字段的名称传递到方法中,可以限制检查的字段数:

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

当您添加iPost条件时,如果问题不清楚,将为每个post backSorry触发该条件。这是关于同一页上对IsValid()的后续调用。因此,您担心在调用此方法时验证背后的代码是否会再次完全运行?那么,只需将一次调用的结果放入一个变量中,然后在您的条件中使用该变量……是的,这将是一个解决方案。问题是首先是否存在问题-IsValid()是否反复执行验证?因此我需要定义一些自定义变量并根据它做出决定?我可能会这样做,因为我还没有找到像
Validation.WasValidLastTime
这样的属性。如果您想继续,而不管以前调用
Validation.IsValid
的结果如何,那么是的,我想您必须使用另一种方法。如果以前
IsValid
返回了
false
,它将继续这样做。但我认为你把事情复杂化了。请看我关于验证系统如何在网页中工作的文章,特别是
Validation.ClassFor
如何工作: