.net自己已经提供了许多非常强大的服务器控件,方便我们在开发时使用。有许多控件我们简直是天天和它们打交道,也有些控件被我们遗忘了(尽管它们那么的好用)。

准备开始讲解了,希望各位一起讨论。被人遗忘的控件(一)

我们知道web窗体中有类控件叫PlaceHolder,它好像一个空白的容器,具体展现在客户端的浏览器中是看不到它的。可能正因为如此,我们很少注意到它的存在,也很少使用这个控件。实际上它是非常好用的,我们举例来说明。

关于网站调查的功能实现,相信对大家都是很简单的,单选多选。下面的代码就是其中的一种实现(为了方便浏览,仅显示其中关键的一段)。
被人遗忘的控件(一)                                                <ItemTemplate>
被人遗忘的控件(一)                                                    
<%# Qtype==0 ?"<input type='radio'":"<input type='checkbox'" %>
被人遗忘的控件(一)                                                    
<%" name='question_"+ Qindex +"'" %>
被人遗忘的控件(一)                                                    
<%" value='"+ DataBinder.Eval(Container.DataItem, "fdoptionid"+"'" %>
被人遗忘的控件(一)                                                    
<%#" max='"+ QmaxSelect +"'>" %>
被人遗忘的控件(一)                                                    
<a href='<%= scripturl %><%# DataBinder.Eval(Container.DataItem, "fdphotoid") %>' class='link-yellow' target=_blank>
被人遗忘的控件(一)                                                        
<%# DataBinder.Eval(Container.DataItem, "fdtitle"%>
被人遗忘的控件(一)                                                    
</a>
被人遗忘的控件(一)                                                
</ItemTemplate>

对于加粗这行的小技巧,应该很多人都明白,也这么使用过,用来实现单选或者多选。或许还有很多人都在使用这种从asp开发中直接应用过来的小技巧。如果调查的类型更丰富,出现了问答题的时候,这样做还行吗?在.net中有没有更好的实现方式呢?

答案是肯定的,使用PlaceHolder控件之后,我们可以更轻松地实现,程序也更容易阅读。下面是aspx的代码以及cs代码(部分)。
被人遗忘的控件(一)                                                                                    <asp:repeater id="Repeater1" runat="server">
被人遗忘的控件(一)                                                                                        
<ItemTemplate>
被人遗忘的控件(一)                                                                                            
<table width="100%" border="0" cellpadding="2" cellspacing="0" class="content">
被人遗忘的控件(一)                                                                                                
<tr>
被人遗忘的控件(一)                                                                                                    
<td><strong><%# Container.ItemIndex+1 %>.<%# DataBinder.Eval(Container.DataItem, "title"%></strong>
被人遗忘的控件(一)                                                                                                        
<asp:Label id="QType" runat="server" Visible="False" Text='<%# DataBinder.Eval(Container.DataItem, "qtype") %>'>
被人遗忘的控件(一)                                                                                                        
</asp:Label>
被人遗忘的控件(一)                                                                                                        
<asp:Label id="QClass" runat="server" Visible="False" Text='<%# DataBinder.Eval(Container.DataItem, "qclass") %>'>
被人遗忘的控件(一)                                                                                                        
</asp:Label>
被人遗忘的控件(一)                                                                                                    
</td>
被人遗忘的控件(一)                                                                                                
</tr>
被人遗忘的控件(一)                                                                                                
<tr>
被人遗忘的控件(一)                                                                                                    
<td>
被人遗忘的控件(一)                                                                                                        
<asp:PlaceHolder id="PlaceHolder1" runat="server"></asp:PlaceHolder></td>
被人遗忘的控件(一)                                                                                                
</tr>
被人遗忘的控件(一)                                                                                            
</table>
被人遗忘的控件(一)                                                                                            
<br>
被人遗忘的控件(一)                                                                                        
</ItemTemplate>
被人遗忘的控件(一)                                                                                    
</asp:repeater>

被人遗忘的控件(一)                    if(Qtype==0//如果是单选题
                    }

可以看出,使用PlaceHolder之后,我们可以在后置代码中方便地实现各种效果,即使是问答题我们也可以通过向PlaceHolder添加子控件来实现。

以上仅仅是举例说明了这个控件的一个具体应用,如何更好的使用这些控件来欢迎大家多多探讨。

相关文章: