让我们以下面这个简单的网站为例:
<asp:TextBox id="TextBox1"
runat="server"></asp:TextBox>
<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/