最近使用ASP.NET在做WEB开发的时候遇到了一种情况,就是想要在DataList的ItemTemplate模板中根据不同的内容需要有不同的显示样式,这样就需要在ItemTemplate中进行判断来实现,但是当使用判断语句的时候,系统会报错,倒腾了半天终于才知道了怎么回事
<asp:DataList ID="DataListId" runat="server" OnItemDataBound="DataListId_ItemDataBound"> <asp:Repeater ID="RepeaterId" runat="server" OnItemDataBound="RepeaterId_ItemDataBound">
倒腾了好久,才发现是因为在控件上绑定的事件(DataListId_ItemDataBound)导致的,因为在控件进行数据绑定初始化的时候会回调DataListId_ItemDataBound方法,当添加了HeaderTemplate模板后,会多一次回调,这样会导致在回调中传入回调函数的参数类型的不同发生错误,这个时候需要在DataListId_ItemDataBound方法中判断回调参数的类型才可以避免此错误,代码如下:
protected void DataList2_ItemDataBound(object sender, RepeaterItemEventArgs e) { //当回调参数的类型为HeaderTemplate和FooterTemplate的时候直接返回 if(e.Item.ItemType == ListItemType.Header || e.Item.ItemType == ListItemType.Footer) { return; } }