与我的其他问题有关 - 我只使用过runat =" server"的HTMLControls和WebControls勉强,更喜欢控制生成的标记(包括元素的ID等)。

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

有帮助吗?

解决方案

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

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

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

 <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项目正在使用此方法。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top