更改控件上的边框或背景颜色?

时间:2013-09-04 17:15:02

标签: c# asp.net validation webforms

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

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

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

但我宁愿将borderbackground-color更改为文本框的红色。怎么办?

4 个答案:

答案 0 :(得分:2)

您可以向服务器端和客户端的验证器添加自定义逻辑。查看此链接以获取帮助。 http://msdn.microsoft.com/en-us/library/f5db6z8k%28v=vs.90%29.aspx

答案 1 :(得分:0)

我不确定您是否需要帮助验证或更改颜色(或两者),但我只是尝试了这个小小的双按钮应用程序,它似乎工作。当然,我没有使用任何动态控件名称和银行业务,“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; 
    }

答案 2 :(得分:0)

正如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,然后使用其余代码。

答案 3 :(得分:0)

遍历所有验证器并将特定的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;
            }
        }