Asp:RequiredFieldValidator即使禁用验证程序也会在Server上进行验证

时间:2011-03-28 11:16:03

标签: c# asp.net validation

我会保持尽可能短的但是它会破坏我的头脑。我有一个带标签和字段的用户控件。我在运行时动态地将用户控件添加到页面。可能有许多用户控件是根据我从数据库获得的数据动态构建的。数据描述标签名称以及是否应填写文本框..即是否需要。我在主页面上有一个提交验证组的提交。用户控件上的所有验证器都具有相同的验证组。到目前为止,我希望如此好。

用户控件的文本框有一个RequiredFieldValidator,看起来都像这样。验证器默认启用。

<asp:TextBox ID="dfControl" runat="server" Text="" ToolTip="ucsAlphanumericEntryDC" Width="95%" CausesValidation="true"/>
<asp:RequiredFieldValidator ID="rfvContol" runat="server" ErrorMessage="Value is required" EnableClientScript="true" 
    ValidationGroup="ValidateContols" ControlToValidate="dfControl" Display="Dynamic" Enabled="true"></asp:RequiredFieldValidator>

当我动态加载控件时,我会检查一个参数,告诉我该字段是否需要。参数来自数据库,代表我将要绘制的控件。如果字段不是必填字段,我在page_preRender中禁用验证..也尝试加载。

       if (!DisplayRequired)
        {
            rfvContol.EnableClientScript = false;
            rfvContol.Enabled = false;
            dfControl.CausesValidation = false;
        }

到目前为止一切顺利。这一切都适用于客户端验证,仅对显示要求设置为true的用户控件进行验证,启用验证器。

然而,在我从连接到用户控制的同一验证组的提交按钮发布页面时,我检查提交上的IsValid,如果它是假的我不保存任何东西。但是当页面在客户端重新渲染时...我在所有用户控件上都有错误消息,说它们是必需的...即使我禁用了其中一些不需要的地方。视图状态是我假设在控件上的默认值。

我还尝试将代码封装在if(!IsPostBack)

中,并尝试不使用验证器重绘控件

有没有人知道为什么验证器在第一页加载时被禁用但是在回发时没有被禁用。

谢谢米克

1 个答案:

答案 0 :(得分:3)

尝试从服务器设置Visible = false,这对我有用。或者您也可以使用客户端ValidatorEnable(valid, false);来禁用验证程序。

HTH。