C# 更改正在验证的控件的边框或背景色?

C# 更改正在验证的控件的边框或背景色?,c#,asp.net,validation,webforms,C#,Asp.net,Validation,Webforms,我正在向使用web表单构建的现有asp.net web应用程序添加验证。我需要验证的输入文本框控件是在服务器端动态创建的 在创建文本框的同时,我还可以创建RangeValidator控件,并将其ControlToValidate设置为文本框的ID 验证失败时,RangeValidator会在验证控件的放置位置显示错误消息 但我宁愿将文本框的边框或背景色改为红色。如何做到这一点?我不确定您是否需要验证或更改颜色(或两者)的帮助,但我刚刚尝试了这个两个按钮的小应用程序,它似乎可以工作。当然,我没有使

我正在向使用web表单构建的现有asp.net web应用程序添加验证。我需要验证的输入文本框控件是在服务器端动态创建的

在创建文本框的同时,我还可以创建
RangeValidator
控件,并将其
ControlToValidate
设置为文本框的ID

验证失败时,
RangeValidator
会在验证控件的放置位置显示错误消息


但我宁愿将文本框的
边框
背景色
改为红色。如何做到这一点?

我不确定您是否需要验证或更改颜色(或两者)的帮助,但我刚刚尝试了这个两个按钮的小应用程序,它似乎可以工作。当然,我没有使用任何动态控件名,并且“testText”是页面上第一个也是唯一一个“testText”控件。您可能还需要添加一些验证以确保控件存在

    private void button1_Click(object sender, EventArgs e)
    {
        TextBox tb = new TextBox();
        tb.Name = "testText";
        this.Controls.Add(tb);
    }

    private void button2_Click(object sender, EventArgs e)
    {
        TextBox tb = (TextBox)this.Controls.Find("testText",true)[0];
        tb.BackColor = System.Drawing.Color.Red; 
    }

您可以向服务器端和客户端的验证器添加自定义逻辑。查看此链接以获取帮助

正如Irfan所说,您可以使用自定义验证器并在服务器上实现验证事件逻辑。但是,更直接的方法是检查页面是否有效,以及检查rangevalidator是否无效。如果不希望验证程序呈现任何消息,请记住将displaymode设置为none

if(!Page.IsValid && !myRangeValidator.IsValid)
{
    // simplified, you will need to search for the control in the whole hierarchy
    var ctrlToValidate = Page.FindControl(myRangeValidator.ControlToValidate) as WebControl;
    if(ctrlToValidate != null)
    {
        ctrlToValidate.BorderColor = Color.Red;
    }
}

也就是说,我更喜欢自定义验证器方法。好的是,您几乎可以重用上面的所有代码。只需删除第一个if,添加范围验证,设置args.IsValid=false,然后使用代码的其余部分。

循环所有验证程序,并向控件添加特定的CSS类。我使用母版页,所以需要在内容占位符中查找控件

        const string ErrorCssClass = "error";

        Validate();
        if (IsPostBack && !IsValid)
        {
            var content = Form.FindControl("MainContent") as ContentPlaceHolder;

            foreach (BaseValidator validator in Validators)
            {
                if (validator.IsValid)
                    continue;

                var controlToValidate = content.FindControl(validator.ControlToValidate) as WebControl;
                if (controlToValidate != null && !controlToValidate.CssClass.Contains(ErrorCssClass))
                    controlToValidate.CssClass += " " + ErrorCssClass;
            }
        }

谢谢你的回复,但这不是我想要的。我有一个验证文本框的范围验证器。当文本框包含无效输入时,范围验证程序将显示错误消息。但是我不想显示错误消息,相反,我想把文本框变成红色。哎呀,我还以为你的意思是你在移动验证服务器端。您可以执行类似的操作,但包括Controls.Find(“RangeValidator”)和if(!RangeValidator.IsValid)tb.BackColor=red。我不确定如何在不涉及服务器端的情况下完成此操作…:/文本框是在服务器端生成的,但验证可以在客户端或服务器端进行,这并不重要。我遇到的问题是RangeValidation的默认行为是更改其外观,而不是更改其目标的外观。我想改变它的目标的外观。