Come creare output HTML senza a) associazione dati o b) utilizzando Response.Write?
-
03-07-2019 - |
Domanda
Tipo di correlato alla mia altra domanda - Ho sempre usato HTMLControls con runat = " server " e WebControls a malincuore, preferendo avere il controllo sul markup che viene generato (compresi gli ID degli elementi, ecc.).
Qual è il tuo suggerimento, per esempio, di scorrere il contenuto di una raccolta e generare una tabella o un elenco senza ricorrere al database o utilizzare Response. Scrivere in un ciclo dal code-behind? Sono interessato ai diversi approcci per la creazione di codice pulito e gestibile.
Soluzione
Quando dici "quotazione dati", " stai parlando di associare un set di risultati del database a Gridview o Repeater, ecc. tramite una chiamata .Bind (), o semplicemente usando qualsiasi controllo server ASP.NET (o controllo server HTML) in generale?
Perché, se vuoi solo evitare di usare i controlli del server in generale, ma non vuoi usare Response.Write, sei seriamente limitato nelle tue opzioni.
Personalmente, se vuoi avere il controllo sul markup, perché non semplicemente scorrere un SqlDataReader o qualcosa del genere e poi salvare i risultati in un controllo letterale, usando HTML dove applicabile. Quindi all'interno della pagina (ovunque tu voglia visualizzare i dati) fai semplicemente:
<asp:Literal ID="ltrResults" runat="server" />
Altri suggerimenti
Non c'è nulla che possa impedirti di scorrere la tua raccolta direttamente nella tua pagina aspx.
<ul>
<% foreach(Person person in this.People) {%>
<li><%=person.Firstname %> <%=person.Lastname %></li>
<% } %>
</ul>
In questo esempio People è una proprietà dell'elenco sul mio codebehind. Troverai molti progetti ASP.NET MVC che utilizzano questo metodo.
@Brownie ... sì, ma quelle sono le istruzioni Response.Write ... stai solo usando il formato abbreviato
Ispirato al primo suggerimento, ho anche provato ad aggiungere un PlaceHolder ad aspx e quindi ad aggiungere controlli figlio ad esso programmaticamente dal code-behind. Spero di poter creare un controllo utente per il contenuto ripetuto e quindi aggiungerlo a PlaceHolder in un ciclo. Ciò consentirà l'incapsulamento del codice dell'interfaccia utente e dovrebbe nascondere tutte le azioni StringBuilder.
Il controllo del ripetitore viene usato esattamente per quello che vuoi. È un controllo server, ma si specifica quale HTML viene generato nei modelli. Fai database, ma non è solo una scorciatoia per un ciclo manuale?