我希望有人知道答案,因为我对使用Telerik控件非常陌生。这是问题,我有一个要求,如果在验证控件上设置了IsValid标志,我必须为连接到验证控件的控件设置背景颜色。我之前的一个要求可能也会影响到它,它基于SetFocusOnError =“true”设置为控件。
所有控件都包含在asp:UpdatePanel中,页面设置了母版页。
所以我所做的是以下设置焦点我覆盖了System.Web.UI.Page类上的Validate函数,如下所示:
public override void Validate(string group)
{
base.Validate(group);
// get the first validator that failed
var validator = GetValidators(group)
.OfType<BaseValidator>()
.FirstOrDefault(v => !v.IsValid);
// set the focus to the control
// that the validator targets
if (validator != null)
{
//Check to see if SetFocusOnError was set.
if (validator.SetFocusOnError == true)
{
Control target = validator
.NamingContainer
.FindControl(validator.ControlToValidate);
if (target != null)
target.Focus();
}
}
}
这可以工作并将焦点设置到控件上。我接下来要做的就是在我的网页中使用以下内容:
var OriginalValidatorUpdateDisplay = null;
if (typeof (ValidatorUpdateDisplay) == 'function') {
OriginalValidatorUpdateDisplay = ValidatorUpdateDisplay;
ValidatorUpdateDisplay = NewValidatorUpdateDisplay;
}
function NewValidatorUpdateDisplay(val) {
OriginalValidatorUpdateDisplay(val);
ValidateControls();
}
function ValidateControls() {
if (window.Page_Validators) {
for (var vI = 0; vI < Page_Validators.length; vI++) {
var vValidator = Page_Validators[vI];
if (vValidator.isvalid) {
$("#" + vValidator.controltovalidate).removeClass("error");
if ($("#" + vValidator.controltovalidate).parent().find('.riTextBox').length > 0) {
$("#" + vValidator.controltovalidate).parent().removeClass("error");
}
}
else {
$("#" + vValidator.controltovalidate).addClass("error");
if ($("#" + vValidator.controltovalidate).parent().find('.riTextBox').length > 0) {
$("#" + vValidator.controltovalidate).parent().addClass("error");
}
}
}
}
}
但是,当您第一次加载页面并提交页面进行验证时,css不会更改,但如果再次执行此操作则会更改。哦,AddClass只是添加
.error .riTextBox
{
background-color: lightpink !important;
z-index:6001;
}
到控件。
以前有人遇到过这个吗?
哦我还应该注意,如果我删除Telerik控件并使用asp文本框控件,一切正常,但我无法从项目中删除Telerik控件。