решение как-то легко:
только не разбирайте флаг Page.IsValid
:) вместо этого сделайте что-то подобное в вашем void Render(HtmlTextWriter writer)
:
if (!this.Enabled)
{
return;
}
if (this.Page != null)
{
this.Page.VerifyRenderingInServerForm(this);
}
else
{
return;
}
var failedValidators = this.Page.Validators.OfType<BaseValidator>().Where(bv => string.Equals(bv.ValidationGroup, this.ValidationGroup) && !bv.IsValid).ToList();
if (failedValidators.Any())
{
writer.Write(this.HeaderText);
foreach (var failedValidator in failedValidators)
{
writer.Write(failedValidator.ErrorMessage);
}
}
Причина, по которой это работает:
Элемент управления, который вызывает обратную передачу, получил информацию о
- CausesValidation
- ValidationGroup
- и другие вещи
Таким образом, ASP.net-механизм сам выполнит связанные валидаторы и установит для них IsValid
или нет.
редактировать
Чтобы избавиться от исходного HeaderText (который все еще отображается):
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
// overwrite to hide the original HeaderText
}