Page.IsValid检查内部情况吗?

3
我想知道,Page.IsValid如何获得它的值。
如果页面有验证器并且正在进行提交,ASP.NET引擎如何知道页面是否有效?
结果是否保存在隐藏字段中?(我认为不是因为它们不会生成任何隐藏字段)。此外,我认为它不会保存在视图状态中,因为客户端可以添加到视图状态。
提前致谢。
2个回答

2

验证实际上是在服务器级别完成的。当您点击提交时,所有表单值都会被发送回来。然后为每个控件调用服务器端验证器以检查其用户输入值的有效性。


1
这个问题涉及到“内联”验证器的客户端和服务器端两个元素;客户端元素提供快速反馈,但如果用户关闭了JavaScript,它们甚至不会运行,因此还需要一个服务器端组件来保护您网站的数据完整性。 - KeithS
KeithS,我同意。我只是提到了Page.IsValid使用的验证部分,但是你进一步的解释更加清楚了事情。 - dreamerkumar
是的。当你牢记这个公理时,你会发现这并不令人惊讶,即你永远不能信任你的客户端。你的客户端掌握在最终用户手中,而最终用户可能是攻击者。你无法确定提供数据的客户端代码是否是你编写的代码,因此保持悲观态度更安全。此外,大多数验证器中可以指定的规则非常便宜;如果你将检查交给未知CPU功率的客户端,并期望其具有良好的性能,那么在后台编译服务器上运行时,它将更加高效。 - KeithS

0
如果您想要实际的代码:
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public bool IsValid
{
    get
    {
        if (!this._validated)
        {
            throw new HttpException(SR.GetString("IsValid_Cant_Be_Called"));
        }
        if (this._validators != null)
        {
            ValidatorCollection validators = this.Validators;
            int count = validators.Count;
            for (int i = 0; i < count; i++)
            {
                if (!validators[i].IsValid)
                {
                    return false;
                }
            }
        }
        return true;
    }
}

它基本上遍历页面上的所有验证器,并检查它们是否都返回IsValid = true。如果其中任何一个无效,则返回false。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接