我正在向使用 Web 表单构建的现有 asp.net Web 应用程序添加验证。我需要验证的输入文本框控件是在服务器端动态创建的。
在创建文本框时,我还可以创建RangeValidator
控件并将其设置ControlToValidate
为文本框的 ID。
验证失败时,RangeValidator
在放置验证控件的位置显示错误消息。
但我宁愿将文本框的border
或更改background-color
为红色。怎么可能呢?
我正在向使用 Web 表单构建的现有 asp.net Web 应用程序添加验证。我需要验证的输入文本框控件是在服务器端动态创建的。
在创建文本框时,我还可以创建RangeValidator
控件并将其设置ControlToValidate
为文本框的 ID。
验证失败时,RangeValidator
在放置验证控件的位置显示错误消息。
但我宁愿将文本框的border
或更改background-color
为红色。怎么可能呢?
您可以将自定义逻辑添加到服务器端和客户端的验证器。检查此链接以获取帮助。http://msdn.microsoft.com/en-us/library/f5db6z8k%28v=vs.90%29.aspx
遍历所有验证器并将特定的 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;
}
}
正如 Irfan 所说,您可以使用自定义验证器并在服务器验证事件上实现逻辑。但是,更直接的方法是检查页面是否有效以及检查范围验证器是否无效。如果您不希望验证器呈现任何消息,请记住将 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,然后使用其余代码。
我不确定您是否需要帮助验证或更改颜色(或两者),但我刚刚尝试了这个小双按钮应用程序,它似乎工作。当然,我没有使用任何动态控件名称,并且认为“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;
}