2013-09-24 2 views
0

Я добавил CustomValidator для вставки тега <small> вместо стандартного тега <span>, используемого CustomValidator. В настоящее время я использую следующий код для этого.Где функция Render в CustomValidator получает атрибуты?

public class MyValidator : CustomValidator 
{ 
    protected override void Render(HtmlTextWriter writer) 
    { 
     writer.RenderBeginTag("small"); 
     base.Render(writer); 
     writer.RenderEndTag(); 
    } 
} 

Однако, это только помещает <span> тег внутри тега <small>.

<small> 
    <span 
     id="ContentPlaceHolder1_MainForm_CustomAliasValidator" 
     class="error" 
     style="visibility:hidden;"> 
     Alias contains invalid characters. 
    </span> 
</small> 

Таким образом, кажется, что мне нужно, чтобы получить атрибуты тега <span> и ввести их в <small>. Однако writer является единственным аргументом, доступным в функции Render. Насколько мне известно, HtmlTextWriter - это только класс для отображения содержимого html. Где base.Render() получить эти атрибуты и как я могу использовать их в своем классе?

ответ

1

Документация WebControl.Render говорит нам, что он называет WebControl.RenderBeginTag, WebControl.RenderContents и WebControl.RenderEndTag. Вы только переопределили Render для вывода тега обертывания, не изменяя никакого поведения базы.

Вы должны быть в состоянии переопределить свойство WebControl.TagKey, чтобы вернуть HtmlTextWriterTag.Small, чтобы изменить <span> на тег <small>.

Чтобы ответить на ваш вопрос, RenderBeginTag (в вашем случае выводит исходный <label> тег) сначала вызывает WebControl.AddAttributesToRender который вызывает HtmlTextWriter.AddAttribute, эти атрибуты будут затем отображаться на следующем вызове HtmlTextWriter.RenderBeginTag

+0

Спасибо. Это сработало! Я продолжал думать, что «Render» является функцией, унаследованной от «BaseValidator», но «BaseValidator» фактически переопределяет ее из «WebControl», чего я не заметил. – CookieMonster

+0

Кстати, я думаю, что вы ошиблись, «RenderBeginTag». – CookieMonster

+0

Я исправил это сейчас. – sisve

Смежные вопросы