Pergunta

Meio relacionado ao meu outra questão - Eu só usei htmlControls com runat = "servidor" e webcontrols de má vontade, preferindo ter controle sobre a marcação que é gerada (incluindo os IDs dos elementos etc.).

Qual é a sua sugestão para, digamos, iterando o conteúdo de uma coleção e gerando uma tabela ou lista sem recorrer a um banco de dados ou usar a resposta.write em um loop do código-behind? Estou interessado nas diferentes abordagens para criar código limpo e sustentável.

Foi útil?

Solução

Quando você diz "banco de dados", está falando em vincular um conjunto de resultados de banco de dados para uma GridView ou repetidor, etc. através de uma chamada .bind () ou apenas usando qualquer controle do servidor ASP.NET (ou controle do servidor HTML) em geral?

Porque, se você deseja apenas evitar o uso de controles do servidor em geral, mas também não deseja usar a resposta.Write, você estará seriamente limitado em suas opções.

Pessoalmente, se você deseja controle sobre a marcação, por que não apenas atravessar um sqldatareader ou algo assim e, em seguida, salve os resultados para um controle literal, usando HTML, quando aplicável. Então, dentro da página (onde você deseja que os dados apareçam), basta fazer:

 <asp:Literal ID="ltrResults" runat="server" />

Outras dicas

Não há nada para impedi -lo de iterar sua coleção diretamente na sua página ASPX.

 <ul>
     <% foreach(Person person in this.People) {%>

         <li><%=person.Firstname %> <%=person.Lastname %></li>

     <% } %>
 </ul>

Neste exemplo, as pessoas são uma propriedade de lista no meu CodeBehind. Você encontrará muitos projetos ASP.NET MVC estão usando esse método.

@Brownie ... sim, mas essas são declarações de resposta. Você está apenas usando o formato abreviado

Inspired by the first suggestion I've also tried adding a PlaceHolder to the aspx and then adding child controls to it programatically from the code-behind. I'm hoping I can create a user control for the repeating content and then add it to the PlaceHolder in a loop. This will allow the UI code to be nicely encapsulated and should hide all the StringBuilder action.

The repeater control is used for exactly what you want. It is a server control, but you specify what HTML is generated in the templates. You do databind, but isnt that just a shortcut for a manual loop?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top