Удаление атрибута класса CSS из тега в пользовательском элементе управления сервером - PullRequest
0 голосов
/ 14 октября 2008

Привет!

Я создал пользовательский класс кнопок для отображения следующего:

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

Однако вместо этого он выглядит так (обратите внимание на посторонний атрибут «class» в теге 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);
    }
}

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

Ответы [ 3 ]

1 голос
/ 15 октября 2008

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

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 голосов
/ 16 октября 2008

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

0 голосов
/ 14 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...