ASP.NET:如何更改验证失败的控件的背景颜色?

标签 asp.net validation

让我们以下面这个简单的网站为例:

<asp:TextBox id="TextBox1" 
runat="server"></asp:TextBox>
&nbsp; 
<asp:RequiredFieldValidator 
id="RequiredFieldValidator1" runat="server" 
ErrorMessage="Required!" 
ControlToValidate="TextBox1">
</asp:RequiredFieldValidator>

现在,我希望 TextBox1 在验证失败时将其 BackColor 更改为黄色。有没有一种简单的方法可以做到这一点?

最佳答案

Page.Validators 是一个 ValidatorCollection。您可以迭代此集合,将每个成员强制转换为 BaseValidator。检查 BaseValidator.IsValid 并从 BaseValidator.ControlToValidate 中获取控件的名称。使用 this.FindControl(control name) 获取对控件的引用(这将返回一个 Control 对象)。执行您需要执行的任何类型检查和转换,然后如果您可以将控件转换为 TextBox 或其他包含 BackColor 属性的控件,则转换它并设置 BackColor。

这是一个简化的版本:

   private void setInvalidControlsBackColor()
    {
        Control c;
        TextBox t;
        foreach (BaseValidator v in Page.Validators)
        {
            if (!v.IsValid)
            {
                c = (Control)this.FindControl(v.ControlToValidate);
                // check the type, make sure you can cast this...
                t = (TextBox)c;
                t.BackColor = Color.Yellow;
                // or however else you want to handle this...
            }
        }
    }

我没有包含类型检查代码的原因是因为您可能希望以不同的方式处理不同的控件类型,等等。另外,如果您没有在验证器上使用工具提示字段,您可以使用这个存储附加信息的字段(有点像 Tag 属性)。这可能被认为是丑陋的做法,但如果您需要它,它就在那里……可以用作如何处理有效/无效状态的提示。

关于ASP.NET:如何更改验证失败的控件的背景颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/665603/

相关文章:

c# - Javascript window.open() 在 IE 8 中不会显示新内容,除非刷新

c# - 使用来自两个数据库的自动增量ID连接来自两个表的数据

asp.net - 大空白 HTML

node.js - 仅当值发生变化时才验证

ruby-on-rails - rails : carrier wave : validate before file upload

validation - 如何最好地验证 URL 是否在公共(public)互联网上?

ruby-on-rails - 在 Rails 中验证时间

css - 使用 CSS 根据可用空间自动调整 Textarea 的大小

c# - 无法加载文件或程序集 'Microsoft.AspNet.Scaffolding.12.0'

validation - 由于重复的 "class"规范和单选按钮标签问题,站点将无法验证