如何在没有a)数据绑定的情况下创建HTML输出或b)使用Response.Write?

时间:2009-01-01 21:33:58

标签: asp.net html data-binding web-controls htmlcontrols

与我的other question有关 - 我曾经只使用过runat =“server”和WebControls的HTMLControls,更喜欢控制生成的标记(包括元素的ID等) )。

你有什么建议,比如迭代一个集合的内容并生成一个表或列表,而不需要在代码隐藏的循环中使用数据绑定或使用Response.Write?我对创建干净,可维护的代码的不同方法感兴趣。

5 个答案:

答案 0 :(得分:4)

没有什么可以阻止你直接在aspx页面中迭代你的集合。

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

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

     <% } %>
 </ul>

在此示例中,People是我的代码隐藏的列表属性。您会发现许多ASP.NET MVC项目正在使用此方法。

答案 1 :(得分:1)

当您说“数据绑定”时,您是说通过.Bind()调用将数据库结果集绑定到Gridview或Repeater等,或者仅使用任何ASP.NET服务器控件(或HTML服务器控件)总的来说?

因为,如果您只是想避免一般使用服务器控件,但又不想使用Response.Write,那么您的选项将受到严重限制。

就个人而言,如果你想控制标记,为什么不循环浏览SqlDataReader或其他东西,然后使用HTML将结果保存到Literal控件。然后在页面内(您想要显示数据的任何地方)只需执行:

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

答案 2 :(得分:0)

@Brownie ...是的,但那些是Response.Write语句......你只是使用速记格式

答案 3 :(得分:0)

受到第一个建议的启发,我还尝试将一个PlaceHolder添加到aspx,然后从代码隐藏中以编程方式添加子控件。我希望我可以为重复内容创建用户控件,然后将其添加到循环中的PlaceHolder中。这将允许很好地封装UI代码,并且应该隐藏所有StringBuilder操作。

答案 4 :(得分:0)

转发器控件用于您想要的。它是一个服务器控件,但您可以指定模板中生成的HTML。你做数据绑定,但不仅仅是手动循环的快捷方式吗?