有点与我的另一个问题有关——我只勉强使用了带有 runat="server" 和 WebControls 的 HTMLControls,更喜欢控制生成的标记(包括元素的 id 等)。
你有什么建议,比如说,迭代集合的内容并生成一个表或列表而不诉诸数据绑定或在代码隐藏的循环中使用 Response.Write?我对创建干净、可维护代码的不同方法很感兴趣。
有点与我的另一个问题有关——我只勉强使用了带有 runat="server" 和 WebControls 的 HTMLControls,更喜欢控制生成的标记(包括元素的 id 等)。
你有什么建议,比如说,迭代集合的内容并生成一个表或列表而不诉诸数据绑定或在代码隐藏的循环中使用 Response.Write?我对创建干净、可维护代码的不同方法很感兴趣。
没有什么可以阻止您直接在您的 aspx 页面中迭代您的集合。
<ul>
<% foreach(Person person in this.People) {%>
<li><%=person.Firstname %> <%=person.Lastname %></li>
<% } %>
</ul>
在此示例中,People 是我的代码隐藏中的列表属性。你会发现很多 ASP.NET MVC 项目都在使用这种方法。
当您说“数据绑定”时,您是指通过 .Bind() 调用将数据库结果集绑定到 Gridview 或 Repeater 等,还是一般仅使用任何 ASP.NET 服务器控件(或 HTML 服务器控件)?
因为,如果您只想避免使用一般的服务器控件,但又不想使用 Response.Write,那么您的选择就会受到严重限制。
就个人而言,如果您想控制标记,为什么不循环遍历 SqlDataReader 或其他东西,然后在适用的情况下使用 HTML 将结果保存到 Literal 控件。然后在页面内(无论您希望数据出现在哪里),只需执行以下操作:
<asp:Literal ID="ltrResults" runat="server" />
@Brownie ......是的,但那些是 Response.Write 语句......你只是使用速记格式
受第一个建议的启发,我还尝试向 aspx 添加 PlaceHolder,然后从代码隐藏中以编程方式向其添加子控件。我希望我可以为重复内容创建一个用户控件,然后将其添加到循环中的 PlaceHolder 中。这将允许 UI 代码被很好地封装,并且应该隐藏所有 StringBuilder 操作。
中继器控件完全用于您想要的。它是一个服务器控件,但您可以指定在模板中生成的 HTML。您进行数据绑定,但这不只是手动循环的快捷方式吗?