Entwickler-Ecke

ASP.NET und Web - HtmlGenericControl/FindControl - HTML-Element im auslesen


Froschkoenig84 - Do 01.03.18 17:20
Titel: HtmlGenericControl/FindControl - HTML-Element im auslesen
Hallo. :)

Kurz zu mir: Ich komme ursprünglich aus der PHP-Ecke und hatte damals 10 Jahre lang PHP entwickelt, bis ich dann vor etwa 3 Jahren mehr und mehr zu C#.NET wechselte und inzwischen gar kein PHP mehr mache. Allerdings habe ich bis Dezember nur kleinere Website-Projects entwickelt und versuche mich - aufgrund mehrerer neuer Projekte im Job - ein wenig in Web App Projects einzuarbeiten. Bitte verzeiht mir, wenn ich noch nicht 100% fit bin. Syntax ist mir aufgrund der letzten drei Jahre bekannt, aber ich kenne noch nicht den vollen Umfang der Strukturen, besonders nicht in den App-Projekten.


So. Mein aktuelles Ziel ist eigentlich ganz simpel... Ich habe ein Markup-Element mit einer ID und dem runat="server" versehen und versuche nun den gesamten Inhalt dieses Elements im Code-Behind in einen String zu ziehen. In meinen bisherigen Website-Projects habe ich das immer via HtmlGenericControl (bzw. FindControl) realisiert. Zwar scheint das Element auch in meinem neuen Web-App-Project ansprechbar zu sein (ich kann zusätzliche Klassen einfügen oder den Namen vom Elternelement auslesen), aber den Inhalt des Objektes kann ich nicht greifen. Ich dachte an FindControl("html").InnerHtml, aber das scheint nicht zu existieren. Es muss auch nicht zwangsläufig via HtmlGenericControl realisiert werden, Hauptsache ich kann irgendwo den gesamten HTML-Content eines Elements (am besten eben das <HTML>-Element) in einen String auslesen, darin ein wenig DOM-Manipulieren und am Ende das Element mit dem neuen Content wieder überschreiben. Anders ausgedrückt, ich habe mehrere sehr einfache und leere Templates und möchte diese vernünftig befüllen.

Zitat:
Default.aspx

HTML-Dokument
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="API.Default" ValidateRequest="false" %>
<!DOCTYPE html>
<html id="html" runat="server">
    <head>
        <title>Title</title>
        <meta charset="utf-8"/>
    </head>
    <body>
        <div>TEST</div>
    </body>
</html>


Zitat:
Default.aspx.cs

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
//using CsQuery; //docu: https://github.com/jamietre/CsQuery

namespace API
{
    public partial class Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var html = FindControl("html");
            Response.Write("->"+html.ToString()+"<-");
        }
    }
}



Das ist jetzt nur eine Tryout-Spielerei. Ich bin mir sicher es gibt fürs Befüllen von Templates spezielle Libs, aber anfangs spiele ich erstmal "doof" herum.
Aber später werde ich via RESTful (oder vergleichbarer API-Struktur) JSONs ausgeben müssen. Dazu erstelle ich dann aber ein neues Thema im Forum. :)


Jetzt erstmal das generelle Auslesen von MarkUp-Elementen in einen String im CodeBehind. :)


Froschkoenig84 - Do 01.03.18 17:44

...oder ist vielleicht so etwas...

C#-Quelltext
1:
string htmlCode = client.DownloadString("http://www.google.com/");                    

...mit der lokalen Page möglich?