Задача такая — надо автоматом форматированить cpp-листинг на web-странице (ключевые слова своим цветом и т. п.). Пробовал создать ascx-компонент. Но как передать в него листинг форматируемой программы? Пробовал так:
<uc1:content id="Content1" runat="server">int a;
for(int i;...
</uc1:content>
— возникает ошибка — мол, нельзя писать между тегами. Если же ставить текст прямо в коде компонента, то все нормально.
Подскажите, кто знает, как это правильно делать.
Здравствуйте, gde11, Вы писали:
G>Задача такая — надо автоматом форматированить cpp-листинг на web-странице (ключевые слова своим цветом и т. п.). Пробовал создать ascx-компонент. Но как передать в него листинг форматируемой программы? Пробовал так:
G><uc1:content id="Content1" runat="server">int a;
G>for(int i;...
G></uc1:content>
G> — возникает ошибка — мол, нельзя писать между тегами. Если же ставить текст прямо в коде компонента, то все нормально.
G>Подскажите, кто знает, как это правильно делать.
Правильно будет использовать Custom Control, а не User Control — тебе же все равно Render переписывать.
А UserControl'у текст можно передать так:
[ System.Web.UI.ParseChildren(ChildrenAsProperties = false) ]
public class Content : System.Web.UI.UserControl
{
///
В твоем примере к коллекции Content.Controls будет добавлен LiteralControl, у которого Text будет равен "int a; и т.д."
Теперь нужно Render переписать:
protected override void Render(HtmlTextWriter output)
{
if ( this.HasControls() )
{
LiteralControl ctl = this.Controls[this.Controls.Count - 1] as LiteralControl;
if ( ctl != null )
output.Write("<span style=\"color: green; font: normal 48pt courier;\">" + ctl.Text + "</span>");
}
}
Но правильно, все-таки, Custom Control.