如何在没有a)数据绑定的情况下创建HTML输出或b)使用Response.Write?
-
03-07-2019 - |
题
与我的其他问题有关 - 我只使用过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。你做数据绑定,但不仅仅是手动循环的快捷方式吗?