Ich versuche, ein einfaches Dienstprogramm Webcontrol zu schreiben, um einzeilige Nachrichten innerhalb einer Webseite anzuzeigen - Status-Updates, Fehlermeldungen, etc. Die Nachrichten kommen von anderen Steuerelementen auf der Seite, durch Aufruf einer Methode im Webcontrol. Wenn das Steuerelement bis zu dem Zeitpunkt, zu dem es gerendert werden soll, keine Nachrichten mehr enthält, möchte ich nicht, dass es auf der Seite überhaupt gerendert wird. Ich möchte, dass es Control.Visible = false setzt. Dies scheint jedoch nur für das Rendering ohne Postback zu funktionieren. Hier ist der Code Ich verwende:An welchem Punkt im Control Lifecycle hört Control.Visible auf zu rendern?
public class MessageList : WebControl
{
#region inner classes
private struct MessageItem
{
string Content, CssClass;
public MessageItem(string content, string cssClass)
{
Content = content;
CssClass = cssClass;
}
public override string ToString()
{ return "<li" + (String.IsNullOrEmpty(CssClass) ? String.Empty : " class='" + CssClass + "'") + ">" + Content + "</li>"; }
}
private class MessageQueue : Queue<MessageItem> { }
#endregion
#region fields, constructors, and events
MessageQueue queue;
public MessageList() : base(HtmlTextWriterTag.Ul)
{
queue = new MessageQueue();
}
protected override void OnLoad(EventArgs e)
{
this.Controls.Clear();
base.OnLoad(e);
}
protected override void OnPreRender(EventArgs e)
{
this.Visible = (queue.Count > 0);
if (this.Visible)
{
while (queue.Count > 0)
{
MessageItem message = queue.Dequeue();
this.Controls.Add(new LiteralControl(message.ToString()));
}
}
base.OnPreRender(e);
}
#endregion
#region properties and methods
public void AddMessage(string content, string cssClass)
{ queue.Enqueue(new MessageItem(content, cssClass)); }
public void AddMessage(string content)
{ AddMessage(content, String.Empty); }
#endregion
}
Ich habe versucht, zu dem Scheck innerhalb Create setzen, mit dem gleichen Ergebnis.
Seien Sie sich bewusst, dass Sie anfällig für Injection-Angriffe sind, wenn Sie keine Codierung für Ihre CssClass- oder HTML-Codierung für Ihre Inhalte vornehmen, wenn dies nicht an anderer Stelle geschieht. – daveidmx