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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top