Heim Web-Frontend HTML-Tutorial Tipps zur Verwendung von UserControl zum Generieren von HTML

Tipps zur Verwendung von UserControl zum Generieren von HTML

Mar 08, 2017 pm 03:58 PM

Benutzersteuerung ist sicherlich jedem bei der Verwendung von ASP.NET bekannt. Neben ASPX-Seiten ist ASCX die häufigste. ASCX ist eine Komponente mit unabhängiger Logik, die leistungsstarke Wiederverwendungsfunktionen bietet und bei rationaler Verwendung die Entwicklungseffizienz erheblich verbessern kann. Das direkte Generieren von HTML-Inhalten über die Benutzersteuerung ist eigentlich eine relativ verbreitete Technik (insbesondere in der AJAX-Ära). Allerdings gibt es in diesem Bereich im Internet immer noch relativ wenig Inhalte, daher verwende ich hier eine An Beispiel stellt diese Technik kurz vor.

Das Kommentieren eines Objekts (Artikel, Bild, Musik usw.) ist eine der häufigsten Funktionen in der Anwendung. Zuerst definieren wir eine Kommentarklasse und die darin verwendete „get“-Methode:

public partial class Comment{    public DateTime CreateTime { get; set; } 
    public string Content { get; set; }
} 
public partial class Comment{    private static List<Comment> s_comments = new List<Comment>
    {        new Comment
        {
            CreateTime = DateTime.Parse("2007-1-1"),
            Content = "今天天气不错"
        },        new Comment
        {
            CreateTime = DateTime.Parse("2007-1-2"),
            Content = "挺风和日丽的"
        },        new Comment
        {
            CreateTime = DateTime.Parse("2007-1-3"),
            Content = "我们下午没有课"
        },        new Comment
        {
            CreateTime = DateTime.Parse("2007-1-1"),
            Content = "这的确挺爽的"
        }
    }; 
    public static List<Comment> GetComments(int pageSize, int pageIndex, out int totalCount)
    {
        totalCount = s_comments.Count; 
        List<Comment> comments = new List<Comment>(pageSize); 
        for (int i = pageSize * (pageIndex - 1);
            i < pageSize * pageIndex && i < s_comments.Count; i++)
        {
            comments.Add(s_comments[i]);
        } 
        return comments;
    }
}
Nach dem Login kopieren

Um eine Liste von Kommentaren anzuzeigen, können wir sie mit einem Benutzersteuerelement (ItemComments.aspx) kapseln. Natürlich ist auch das Paging unerlässlich:

<asp:Repeater runat="server" ID="rptComments">
    <ItemTemplate>
        时间:<%# (Container.DataItem as Comment).CreateTime.ToString() %><br />
        内容:<%# (Container.DataItem as Comment).Content %> 
    </ItemTemplate>
    <SeparatorTemplate>
        <hr />
    </SeparatorTemplate>    <FooterTemplate>
        <hr />
    </FooterTemplate></asp:Repeater> <% if (this.PageIndex > 1)
   { %>
        <a href="/ViewItem.aspx?page=<%= this.PageIndex - 1 %>" title="上一页">上一页</a> <% } %><% if (this.PageIndex * this.PageSize < this.TotalCount)
   { %>
Nach dem Login kopieren

und:

public partial class ItemComments : System.Web.UI.UserControl{    protected override void OnPreRender(EventArgs e)
    {        base.OnPreRender(e); 
        this.rptComments.DataSource = Comment.GetComments(this.PageSize,            this.PageIndex, out this.m_totalCount);        this.DataBind();
    } 
    public int PageIndex { get; set; } 
    public int PageSize { get; set; } 
    private int m_totalCount;    public int TotalCount
    {        get
        {            return this.m_totalCount;
        }
    }
}
Nach dem Login kopieren

Dann verwenden Sie diese Komponente in der Seite (ViewItem.aspx):

<p id="comments"><demo:ItemComments ID="itemComments" runat="server" /></p>
Nach dem Login kopieren

und:

public partial class ViewItem : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)
    {        this.itemComments.PageIndex = this.PageIndex;
    } 
    protected int PageIndex
    {        get
        {            int result = 0;            Int32.TryParse(this.Request.QueryString["page"], out result); 
            return result > 0 ? result : 1;
        }
    }
}
Nach dem Login kopieren

Der Effekt nach dem Öffnen von ViewItem.aspx ist wie folgt:

Zeit: 1.1.2007 0:00:00 Inhalt: Das Wetter ist heute gut


Zeit: 2.1.2007 0:00:00 Inhalt: Sehr sonnig


Zeit: 03.01.2007 0:00:00 Inhalt: Wir haben nachmittags keinen Unterricht


Nächste Seite

Die Funktion dieser Seite ist sehr einfach, nämlich Kommentare anzuzeigen. Die Seitenzahl des aktuellen Kommentars wird mithilfe des Seitenelements von QueryString angegeben. Anschließend werden die Eigenschaften des ItemComments.ascx-Steuerelements abgerufen und in ViewItem.aspx festgelegt. Das ItemComments-Steuerelement ruft Daten ab und bindet sie basierend auf seinen eigenen Eigenschaften. Der Anzeigeinhalt wird vollständig in ascx definiert. Aufgrund der Notwendigkeit einer Paging-Funktion enthält dieses Kommentarsteuerelement auch Links zur vorherigen Seite und zur nächsten Seite. Das Ziel ihrer Links ist sehr einfach, nämlich die Seite ViewItem.aspx, und fügt nur die Abfragezeichenfolge der Seitennummer hinzu .

Die Funktion ist abgeschlossen, aber wenn ich sie verwende, fühlt es sich plötzlich unangemessen an. Warum? Denn wenn wir die Seite umblättern oder der Benutzer einen Kommentar postet, wird die gesamte Seite aktualisiert. Das ist nicht gut. Sie müssen wissen, dass die ViewItem-Seite möglicherweise mehrere andere Anzeigeteile enthält und diese unverändert bleiben. Und wenn auch mehrere andere Teile paginiert werden müssen, kann es erforderlich sein, die aktuelle Seitenzahl jedes Teils auf der Seite beizubehalten, sodass der Entwicklungsaufwand immer noch relativ hoch ist.

Dann verwenden wir AJAX. Unabhängig davon, ob der Benutzer die Seite umblättert oder beim Anzeigen der Kommentare einen Kommentar hinterlässt, hat dies keine Auswirkungen auf andere Inhalte auf der Seite. Um diese Funktion zu entwickeln, ist natürlich serverseitige Unterstützung erforderlich. Wie geht das? Im Allgemeinen haben wir immer zwei Möglichkeiten:

  1. Der Server gibt JSON-Daten zurück und betreibt das DOM auf dem Client zum Rendern.

  2. Der Server gibt den HTML-Inhalt direkt zurück und legt dann den Container auf dem Client fest (z. B. p mit der ID der obigen Kommentare).

Unabhängig davon, welcher Ansatz gewählt wird, wird die „Präsentations“-Logik normalerweise erneut geschrieben (die erste Präsentationslogik wird in ItemComments.ascx geschrieben). Wenn Sie den ersten Ansatz verwenden, muss die Präsentationslogik auf der Clientseite durch Manipulation des DOM gerendert werden. Wenn Sie den zweiten Ansatz verwenden, müssen Sie die Zeichenfolgenverkettung auf der Serverseite durchführen. Beide Ansätze verstoßen gegen das DRY-Prinzip. Wenn die Präsentationsmethode in ItemComments.ascx geändert wird, muss auch die andere Stelle entsprechend geändert werden. Unabhängig davon, ob es sich um den Betrieb von DOM-Elementen oder das Zusammenfügen von Zeichenfolgen handelt, ist die Wartung schwieriger und die Entwicklungseffizienz ist natürlich nicht hoch.

Es wäre großartig, wenn wir den HTML-Inhalt direkt aus dem ItemComments-Steuerelement abrufen könnten – also machen wir das. Schauen Sie sich bitte den folgenden Code an (GetComments.ashx):

public class GetComments : IHttpHandler{    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain"; 
        ViewManager<ItemComments> viewManager = new ViewManager<ItemComments>();        
        ItemComments control = viewManager.LoadViewControl("~/ItemComments.ascx");
 
        control.PageIndex = Int32.Parse(context.Request.QueryString["page"]);
        control.PageSize = 3;
 
        context.Response.Write(viewManager.RenderView(control));
    } 
    public bool IsReusable { ... }
}
Nach dem Login kopieren

Einfacher Code, nicht wahr? Erstellen Sie einfach das Objekt, legen Sie die Eigenschaften fest und geben Sie es dann über Response.Write aus. Es ist wirklich keine große Sache – aber der Schlüssel liegt in der ViewManager-Klasse. Schauen wir uns an, wie es implementiert wird:

public class ViewManager<T> where T : UserControl{    private Page m_pageHolder; 
    public T LoadViewControl(string path)
    {        this.m_pageHolder = new Page();        return (T)this.m_pageHolder.LoadControl(path);
    } 
    public string RenderView(T control)
    {        StringWriter output = new StringWriter(); 
        this.m_pageHolder.Controls.Add(control);        HttpContext.Current.Server.Execute(this.m_pageHolder, output, false); 
        return output.ToString();
    }
}
Nach dem Login kopieren

Es gibt nur zwei Methoden in ViewManager: LoadViewControl und RenderView. Die Funktion der LoadViewControl-Methode besteht darin, eine Control-Instanz zu erstellen und zurückzugeben, und die Funktion der RenderView-Methode besteht darin, HTML zu generieren. Der Trick dieser Implementierung besteht darin, ein neu erstelltes Page-Objekt als „Container“ zum Generieren von Steuerelementen zu verwenden. Am Ende führen wir tatsächlich den gesamten Lebenszyklus des Page-Objekts aus und geben die Ergebnisse aus. Da dieses leere Page-Objekt keinen anderen Code generiert, erhalten wir den vom Benutzersteuerelement generierten Code.

Aber um diesen AJAX-Effekt zu erzielen, müssen zwei Dinge getan werden.

Die erste besteht darin, einfach den Umblätterlink im ItemComments-Steuerelement so zu ändern, dass er beim Klicken eine JavaScript-Funktion aufruft. Der Code für „Vorherige Seite“ lautet beispielsweise:

<a href="/ViewItem.aspx?page=<%= this.PageIndex - 1 %>" title="上一页"    
onclick="return getComments(<%= this.PageIndex - 1 %>);">上一页</a>
Nach dem Login kopieren

Zweitens implementieren Sie die Client-Methode getComments. Hier habe ich das Prototyp-Framework verwendet. Der Vorteil besteht darin, dass ich recht prägnanten Code verwenden kann, um den AJAX-Effekt des Ersetzens von HTML zu erzielen:

<script type="text/javascript" language="javascript">
    function getComments(pageIndex)
    {        new Ajax.Updater(            "comments",            "/GetComments.ashx?page=" + pageIndex + "&t=" + new Date(),
            { method: "get" }); 
        
        return false; // IE only
    }</script>
Nach dem Login kopieren

Fertig.

Tatsächlich ist die Verwendung von UserControl zum Generieren von HTML-Code, wie bereits erwähnt, eine sehr verbreitete Technik. Insbesondere da AJAX-Anwendungen immer beliebter werden, können durch den sinnvollen Einsatz der oben genannten Methoden problemlos AJAX-Effekte zu unseren Anwendungen hinzugefügt werden. Und in vielen Fällen können wir UserControl verwenden, um den Inhalt zu bearbeiten, auch wenn wir den Inhalt nicht auf der Seite anzeigen müssen. Weil das Schreiben von UserControl hinsichtlich der Entwicklungseffizienz und Wartbarkeit viel höher ist als das Verketten von Zeichenfolgen. Da diese Methode tatsächlich das bewährte Modell von WebForms verwendet, ist sie auch hinsichtlich der Ausführungseffizienz recht effizient. Darüber hinaus hat die Verwendung von UserCotrol für die HTML-Generierung, wie im Beispiel gerade, weitere Vorteile:

  1. Die Seitenrendering-Logik wird nur einmal implementiert, was die Wartbarkeit verbessert.

  2. hat keinen Einfluss auf die SEO der Seite, da die href von weiterhin gültig ist.

Tatsächlich ist WebForms ein sehr leistungsfähiges Modell, daher verwendet die Ansicht von ASP.NET MVC auch die WebForms-Engine. Durch das obige Beispiel können wir tatsächlich viele andere Dinge tun – beispielsweise die Verwendung von UserControl zum Generieren von XML-Daten, da UserControl selbst keinen zusätzlichen Inhalt mitbringt.

Das obige ist der detaillierte Inhalt vonTipps zur Verwendung von UserControl zum Generieren von HTML. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was ist der Zweck des & lt; Fortschritts & gt; Element? Was ist der Zweck des & lt; Fortschritts & gt; Element? Mar 21, 2025 pm 12:34 PM

Der Artikel erörtert den HTML & lt; Progress & gt; Element, Absicht, Styling und Unterschiede vom & lt; Meter & gt; Element. Das Hauptaugenmerk liegt auf der Verwendung & lt; Fortschritt & gt; Für Aufgabenabschluss und & lt; Meter & gt; für stati

Was ist der Zweck des & lt; datalist & gt; Element? Was ist der Zweck des & lt; datalist & gt; Element? Mar 21, 2025 pm 12:33 PM

Der Artikel erörtert den HTML & lt; Datalist & gt; Element, das die Formulare verbessert, indem automatische Vorschläge bereitgestellt, die Benutzererfahrung verbessert und Fehler reduziert werden.Character Count: 159

Was ist der Zweck des & lt; Meter & gt; Element? Was ist der Zweck des & lt; Meter & gt; Element? Mar 21, 2025 pm 12:35 PM

Der Artikel erörtert das HTML & lt; Meter & gt; Element, verwendet zur Anzeige von Skalar- oder Bruchwerten innerhalb eines Bereichs und seine gemeinsamen Anwendungen in der Webentwicklung. Es differenziert & lt; Meter & gt; von & lt; Fortschritt & gt; und Ex

Was sind die besten Praktiken für die Kompatibilität des Cross-Browsers in HTML5? Was sind die besten Praktiken für die Kompatibilität des Cross-Browsers in HTML5? Mar 17, 2025 pm 12:20 PM

In Artikel werden Best Practices zur Gewährleistung der HTML5-Cross-Browser-Kompatibilität erörtert und sich auf die Erkennung von Merkmalen, die progressive Verbesserung und die Testmethoden konzentriert.

Wie benutze ich die HTML5 & lt; Zeit & gt; Element, um Daten und Zeiten semantisch darzustellen? Wie benutze ich die HTML5 & lt; Zeit & gt; Element, um Daten und Zeiten semantisch darzustellen? Mar 12, 2025 pm 04:05 PM

Dieser Artikel erklärt den HTML5 & lt; Time & gt; Element für semantische Datum/Uhrzeit. Es betont die Wichtigkeit des DateTime-Attributs für die Maschinenlesbarkeit (ISO 8601-Format) neben menschenlesbarem Text, das Zubehör steigert

Wie verwende ich HTML5 -Formularvalidierungsattribute, um die Benutzereingabe zu validieren? Wie verwende ich HTML5 -Formularvalidierungsattribute, um die Benutzereingabe zu validieren? Mar 17, 2025 pm 12:27 PM

In dem Artikel werden unter Verwendung von HTML5 -Formularvalidierungsattributen wie Erforderlich, Muster, Min, MAX und Längengrenzen erörtert, um die Benutzereingabe direkt im Browser zu validieren.

Was ist das Ansichtsfenster -Meta -Tag? Warum ist es wichtig für reaktionsschnelles Design? Was ist das Ansichtsfenster -Meta -Tag? Warum ist es wichtig für reaktionsschnelles Design? Mar 20, 2025 pm 05:56 PM

In dem Artikel wird das Ansichtsfenster -Meta -Tag erörtert, das für das reaktionsschnelle Webdesign auf mobilen Geräten unerlässlich ist. Es wird erläutert, wie die ordnungsgemäße Verwendung eine optimale Skalierung von Inhalten und Benutzerinteraktion gewährleistet, während Missbrauch zu Design- und Zugänglichkeitsproblemen führen kann.

Was ist der Zweck des & lt; iframe & gt; Etikett? Was sind die Sicherheitsüberlegungen bei der Verwendung? Was ist der Zweck des & lt; iframe & gt; Etikett? Was sind die Sicherheitsüberlegungen bei der Verwendung? Mar 20, 2025 pm 06:05 PM

Der Artikel erörtert das & lt; iframe & gt; Der Zweck von Tag, externe Inhalte in Webseiten, seine gemeinsamen Verwendungen, Sicherheitsrisiken und Alternativen wie Objekt -Tags und APIs einzubetten.

See all articles