2008-10-14 3 views
0

Приветствия!Удаление атрибута класса CSS из тега в пользовательском контроле сервера

Я создал пользовательский класс кнопку, чтобы вынести следующее:

<span class="btnOrange"> 
    <input type="submit" id="ctl00_MainContent_m_GoBack" value="Back" name="ctl00$MainContent$m_GoBack"/> 
</span> 

Однако это делает, как это вместо (обратите внимание на посторонний «класс» атрибут в теге INPUT,):

<span class="btnOrange"> 
    <input type="submit" class="btnOrange" id="ctl00_MainContent_m_GoBack" value="Back" name="ctl00$MainContent$m_GoBack"/> 
</span> 

Моя пользовательская кнопка класса выглядит следующим образом:

[ToolboxData(@"<{0}:MyButton runat=server></{0}:MyButton>")] 
public class MyButton : Button 
{ 
    public override void RenderBeginTag(HtmlTextWriter writer) 
    { 
     writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass); 
     writer.RenderBeginTag("span"); 
     base.RenderBeginTag(writer); 
    } 

    public override void RenderEndTag(HtmlTextWriter writer) 
    { 
     writer.RenderEndTag(); 
     base.RenderEndTag(writer); 
    } 
} 

Поскольку мне нужно только установить CLAS s для тега SPAN, можно ли не включать или исключать атрибут класса для тега INPUT?

ответ

1

Вы можете сделать это:

private string _heldCssClass = null; 
public override void RenderBeginTag(HtmlTextWriter writer) 
{ 
    writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass); 
    writer.RenderBeginTag("span"); 
    _heldCssClass = this.CssClass; 
    this.CssClass = String.Empty; 
    base.RenderBeginTag(writer); 
} 

public override void RenderEndTag(HtmlTextWriter writer) 
{ 
    writer.RenderEndTag(); 
    base.RenderEndTag(writer); 
    this.CssClass = _heldCssClass; 
} 

Причина, почему я сохранить свойство CssClass в частной переменной между вызовами метода так предотвратить побочные эффекты от происходящих во время рендеринга. Это может быть неважно в вашем конкретном коде («является ли свойство CssClass действительно важным - после рендеринга?»), Но всегда рекомендуется предотвращать или уменьшать влияние побочных эффектов, таких как то, что показывает вышеприведенный код, путем гашения недвижимость.

0

Как насчет удаления атрибута class из объекта writer после рендеринга span начального тега? Я не знаю ASP, хотя я мог ошибаться.

+0

К сожалению, объект-автор не имеет метода «RemoveAttribute» или тому подобного. И вызов writer.AddAttribute (HtmlTextWriterAttribute.Class, "") фактически создает два атрибута CLASS в теге INPUT; один с «btnOrange» в качестве значения, а другой с пустым значением. – Bullines 2008-10-14 15:12:32

0

Вместо вызова методов базового RenderBegin/RenderEnd, которые сами по себе будет вызывать AddAttributesToRender (тем самым добавив атрибут класса), просто делают вход маркировать себя, как вы делаете с размахом ....

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