Validation.IsValid()是否缓存其结果?
在包含验证的典型ASP.NET网页中,将有以下内容: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"
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
如何工作: