我会尽可能简短,但这让我很头疼。我有一个带有标签和字段的用户控件。我在运行时将用户控件动态添加到页面。可能有许多用户控件是根据我从数据库获得的数据动态构建的。数据描述了标签名称以及文本框是否应填写。即是否需要。我在主页上有一个提交,其中有一个验证组。用户控件上的所有验证器都具有相同的验证组。到目前为止,我希望一切顺利。
用户控件有一个用于文本框的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 ,如果其为 false,则不会保存任何内容。但是,当页面在客户端上重新呈现时......我在所有用户控件上都有错误消息,说它们是必需的......即使我禁用了其中一些不需要的控件。 View 状态是我假设处于打开状态的控件上的默认状态。
我还尝试通过将代码包含在 if(!IsPostBack) 中来不使用验证器重绘控件
有谁知道为什么验证器在第一页加载时被禁用但在回发时不会被禁用时会触发。
谢谢米克
最佳答案
尝试从服务器设置Visible = false
,这对我有用。或者您也可以使用客户端 ValidatorEnable(valid, false);
禁用验证器。
HTH。
关于c# - ASP :RequiredFieldValidator causes validation on Server even if validator is disabled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5458180/