Я надеюсь, что кто-то знает ответ на этот вопрос, поскольку я очень плохо знаком с использованием элементов управления Telerik. Вот проблема, у меня есть требование, которое говорит, что я должен установить цвет фона для элемента управления, прикрепленного к элементу проверки, если флаг IsValid был установлен на элементе управления проверки. Более раннее требование, которое у меня было, могло влиять и на это, было установлено фокус на элемент управления, основанный на SetFocusOnError = "true".
Все элементы управления содержатся в asp: UpdatePanel, и для страницы установлен набор главной страницы.
Итак, что я сделал, чтобы установить фокус, я переопределил функцию Validate для класса System.Web.UI.Page следующим образом:
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 textbox, все работает как надо, но я не могу удалить элементы управления Telerik из проекта.