Ich hoffe, dass jemand da draußen etwas Licht in das Thema der Erstellung von Serversteuerelementen, der Steuerbasisklassen und der Verwendung dieser Klassen bringen kann.Benutzerdefinierte Serversteuerelemente - Basisklassen und Verwendung
Hier ist ein Beispiel, was ich erreichen möchte. Ich möchte ein eigenes Panel-Steuerelement erstellen, die man wie so in der ASPX-Markup instanziiert kann:
<acme:Panel ID="MyPanel" runtat="server" Scrolling="true">
<Header>My Panel Header</Header>
<Toolbars>
<acme:Toolbar ID="Toolbar1" runat="server"/>
<acme:Toolbar ID="Toolbar2" runat="server"/>
</Toolbars>
<Contents>
<%-- Some Content for the Contents section --%>
</Contents>
<Footer>
<%-- Some Content for the Footer section --%>
</Footer>
</acme:Panel>
Es sollte die folgende HTML-Render:
<div id="MyPanel" class="panel scroll-contents">
<div class="panel-header">
<div class="panel-header-l"></div>
<div class="panel-header-c">
<div class="panel-header-wrapper">My Panel Header</div>
</div>
<div class="panel-header-r"></div>
</div>
<div class="panel-toolbars">
// HTML of Toolbar control
</div>
<div class="panel-body">
<div class="panel-body-t">
<div class="panel-body-tl"></div>
<div class="panel-body-tc"></div>
<div class="panel-body-tr"></div>
</div>
<div class="panel-body-m">
<div class="panel-body-ml"></div>
<div class="panel-body-mc">
<div class="panel-body-wrapper">
// Contents
</div>
</div>
<div class="panel-body-mr"></div>
</div>
<div class="panel-body-b">
<div class="panel-body-bl"></div>
<div class="panel-body-bc"></div>
<div class="panel-body-br"></div>
</div>
</div>
<div class="panel-footer">
<div class="panel-footer-l"></div>
<div class="panel-footer-c">
<div class="panel-footer-wrapper">
// Footer contents
</div>
</div>
<div class="panel-footer-r"></div>
</div>
</div>
Der Entwickler sollte eine der Lage sein, wegzulassen Abschnitte außer dem Abschnitt Inhalt. HTML der ausgelassenen Abschnitte sollte nicht gerendert werden. Außerdem sollte der Benutzer ein Panel-Steuerelement in den Code hinter der Seite der Lage sein, zu instanziiert/hinzufügen und zusätzliche Kontrollen an den verschiedenen Abschnitten des Panel-Steuerelement hinzufügen, etwa so:
ACME.Panel MyPanel = new ACME.Panel();
MyPlaceHolder.Controls.Add(MyPanel);
MyPanel.Header = "My Panel Header";
MyPanel.Toolbars.Controls.Add(new ACME.Toolbar());
MyPanel.Footer.Controls.Add(new Literal());
MyPanel.Contents.Controls.Add(new GridView());
ich den folgenden Artikel gelesen haben: Communications Sector Conversations: Erstellen benutzerdefinierter ASP.NET-Serversteuerelemente (Welche Basisklasse?)
Da ich nicht wirklich möchte, dass der Entwickler das Styling meines Steuerelements ändert, sollte die System.Web.UI.Control-Basisklasse ausreichend sein , aber ich muss auch die INamingContainer-Schnittstelle anwenden. So sollte meine Kontrolle wie so aussehen:
using System.Web;
using System.Web.UI;
using System.Web.UI.Design;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.ComponentModel.Design;
using System.Security.Permissions;
namespace ACME
{
[ToolboxData("<{0}:Panel runat=server></{0}:Panel >")]
[ParseChildren(true)]
public class Panel : Control, INamingContainer
{
private string _header;
private ITemplate _toolbars;
private ITemplate _contents;
private ITemplate _footerContents;
public DialogBox()
{
}
[Browsable(false),
PersistenceMode(PersistenceMode.InnerProperty)]
public virtual ITemplate Toolbars
{
get { return _toolbars; }
set { _toolbars = value; }
}
[Browsable(false),
PersistenceMode(PersistenceMode.InnerProperty)]
public virtual ITemplate Contents
{
get { return _contents; }
set { _contents= value; }
}
[Browsable(false),
PersistenceMode(PersistenceMode.InnerProperty)]
public virtual ITemplate Footer
{
get { return _footerContents; }
set { _footerContents = value; }
}
}
}
Ich habe viele Tutorials lesen, aber sie entweder nicht die beabsichtigte Umsetzung decken oder erklären, warum ein bestimmte Ansatz gemacht. Sie haben mich auch so sehr verwirrt, dass ich auf JavaScript zurückgegriffen habe, um das benötigte HTML dynamisch zu rendern. Wenn da draußen ein Kontrollguru ist, könntest du mir bitte erklären, wie du diese Aufgabe bewältigt hast?