Как создать вывод HTML без а) привязки данных или б) использования Response.Write?

StackOverflow https://stackoverflow.com/questions/405508

Вопрос

Как-то связано с моим другой вопрос - Я когда-либо использовал HTMLControls с runat="server" и WebControls неохотно, предпочитая контролировать генерируемую разметку (включая идентификаторы элементов и т. д.).

Что вы предлагаете, скажем, перебирать содержимое коллекции и генерировать таблицу или список, не прибегая к привязке данных или не используя Response.Write в цикле из кода программной части?Меня интересуют различные подходы к созданию чистого и поддерживаемого кода.

Это было полезно?

Решение

Когда вы говорите «привязка данных», вы имеете в виду привязку набора результатов базы данных к Gridview или повторителю и т. д.через вызов .Bind() или просто с помощью любого серверного элемента управления ASP.NET (или серверного элемента управления HTML) в целом?

Потому что, если вы просто хотите вообще избежать использования серверных элементов управления, но при этом не хотите использовать Response.Write, ваши возможности серьезно ограничены.

Лично, если вам нужен контроль над разметкой, почему бы просто не пройти через SqlDataReader или что-то в этом роде, а затем сохранить результаты в элементе управления Literal, используя HTML, где это применимо.Затем на странице (где бы вы ни хотели, чтобы данные отображались) просто выполните:

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

Другие советы

Ничто не мешает вам перебирать коллекцию непосредственно на странице aspx.

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

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

     <% } %>
 </ul>

В этом примере People — это свойство списка в моем коде.Вы обнаружите, что многие проекты ASP.NET MVC используют этот метод.

@Брауни...да, но это операторы Response.Write...вы просто используете сокращенный формат

Вдохновленный первым предложением, я также попробовал добавить PlaceHolder в aspx, а затем добавить к нему дочерние элементы управления программно из кода программной части.Я надеюсь, что смогу создать пользовательский элемент управления для повторяющегося содержимого, а затем добавить его в PlaceHolder в цикле.Это позволит хорошо инкапсулировать код пользовательского интерфейса и скрыть все действия StringBuilder.

Управление повторителем используется именно для того, что вы хотите.Это серверный элемент управления, но вы указываете, какой HTML генерируется в шаблонах.Вы выполняете привязку данных, но не является ли это просто ярлыком для ручного цикла?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top