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

vip*_*tti 2 asp.net validation

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

<asp:TextBox id="TextBox1" 
runat="server"></asp:TextBox>
&nbsp; 
<asp:RequiredFieldValidator 
id="RequiredFieldValidator1" runat="server" 
ErrorMessage="Required!" 
ControlToValidate="TextBox1">
</asp:RequiredFieldValidator>
Run Code Online (Sandbox Code Playgroud)

现在,我希望在验证失败时TextBox1将其更改BackColor为黄色.有没有一种简单的方法来实现这一目标?

Ric*_*ich 5

Page.Validators是一个ValidatorCollection.您可以迭代此集合,将每个成员转换为BaseValidator.检查BaseValidator.IsValid并从BaseValidator.ControlToValidate获取控件的名称.使用this.FindControl(控件名称)来获取对控件的引用(这将返回一个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...
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我没有包含类型检查代码的原因是因为您可能希望以不同的方式处理不同的控件类型等.另外,如果您没有在验证器上使用ToolTip字段,则可以使用此字段存储附加信息(类似于Tag属性).这可能被认为是丑陋的练习,但是如果你需要的话,那就是你的...可以用来暗示如何处理有效/无效状态.