与我的other question有关 - 我曾经只使用过runat =“server”和WebControls的HTMLControls,更喜欢控制生成的标记(包括元素的ID等) )。
你有什么建议,比如迭代一个集合的内容并生成一个表或列表,而不需要在代码隐藏的循环中使用数据绑定或使用Response.Write?我对创建干净,可维护的代码的不同方法感兴趣。
答案 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。你做数据绑定,但不仅仅是手动循环的快捷方式吗?