Page.IsValid总是返回false。

9

我在按钮上设置了cause validation为true。并且在C#代码中检查Page.IsValid。但它总是返回false值?

6个回答

24

这是一段代码片段,帮助我调试了我的问题:

foreach (BaseValidator validator in Page.Validators)
{
    if (validator.Enabled && !validator.IsValid)
    {
        // Put a breakpoint here
        string clientID = validator.ClientID;
    }
}

这帮助我找到了我的问题。我在.aspx页面中有一个被注释掉的表单验证器,但它仍然被渲染/计算为验证器,这可能为我节省了数小时的烦恼!! - Brad

22

我知道现在已经晚了,希望有人会从中受益。

如果你在网页中使用了 Requiredfieldvalidators ,你需要为每个 RequiredValidator 设置 validataiongroup 属性。

然后在代码中,你需要进行检查。

Page.Validate("validategroupname");
if(!Page.IsValid()){
 // your code
}

这解决了问题。


1
IsValid() 不是一个有效的方法。只需使用 Page.IsValid。 - Fandango68

3

在检查其有效状态之前,您是否已调用Page.Validate


我没有调用 Page.validate。 - sathish
你能给我提供一些代码吗? @sashaeve,我需要将causevalidation设置为true。 - sathish
1
在检查页面是否有效之前,您必须始终调用Page.Validate。 - Tim Schmelter

2
如果你的按钮有 CauseValidation = "true",并且你有一些其他必需的控件,则行为是预期的。尝试将 CauseValidation = "false" 或检查按钮和相关控件的 ValidationGroup 属性 (解释)。

我已经添加了一个链接,其中包含验证组行为的解释。 - sashaeve

1
这个问题发生在我使用被注释掉的asp.net验证器时。 例如:
<!--
<asp:label id="labName" runat="server" Text="Name"
AssociatedControlID="tbName"></asp:label> <asp:textbox id="tbName"
runat="server"></asp:textbox> <asp:requiredfieldvalidator
id="ReqFieldValID" runat="server" ControlToValidate="tbName"
ErrorMessage="Please enter your name"></asp:requiredfieldvalidator>
-->

尽管在HTML注释中包装了一个验证器,但由于被注释的验证器,我的页面仍然未通过验证。
解决方案:添加验证摘要以识别问题。删除被注释的验证器即可解决问题。

1

我知道可能有点晚了,但是:你有隐藏的验证器吗?


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