HtmlHelper之DataList实现

本文介绍了一种在纯ASPX环境中使用HTMLHelper对象封装DataList的方法,通过代码实现了类似于WebForm控件的功能,并展示了如何利用匿名函数来自定义模板。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      每个开发者都想在不同的开发环境下封装功能来实现代码重用和提高开发速度,在 WebForm 中提供各式各样的控件;但如果在纯 aspx 下进行 HTML 表现那又如何办呢,在这里就介绍通过代码来封装一个 DataList HtmlHelper 对象来达到其目的;虽然没有象服务控件那样有设计支持,但巧用匿名函数也可以实现自定义模板功能;其使用编写代码量几乎同于服务器控件。

DataList的实现代码

Code
    public class DataList<T> : IHtmlHelper
    
{
        
IHtmlHelper Members#region IHtmlHelper Members

        
public void Render(System.IO.TextWriter writer)
        
{
            Html32TextWriter html 
= new Html32TextWriter(writer);
            DataListItemArgs
<T> e;
            html.WriteBeginTag(
"Table");
            html.WriteAttribute(
"class", Css);
            html.WriteAttribute(
"cellpadding""0");
            html.WriteAttribute(
"cellspacing""0");
            html.Write(
">");
            html.WriteBeginTag(
"tr");
            html.Write(
">");
            
int row = 0;
            
for (int i = 0; i < DataSource.Count; i++)
            
{
                html.WriteBeginTag(
"td");
                html.WriteAttribute(
"class", ItemCss);
                html.Write(
">");
                
if (ItemBlock != null)
                
{
                    e 
= new DataListItemArgs<T>(i, row, DataSource[i]);
                    ItemBlock(e);
                }

                html.WriteEndTag(
"td");
                
if ((i + 1% Columns == 0 || (i + 1== DataSource.Count)
                
{
                    html.WriteEndTag(
"tr");
                }

                
if ((i + 1% Columns == 0 && (i + 1!= DataSource.Count)
                
{
                    html.WriteBeginTag(
"tr");
                    html.Write(
">");
                    row
++;
                }

            }

            html.WriteEndTag(
"Table");
        }


        
#endregion

        
public string Css
        
{
            
get;
            
set;
        }

        
public string ItemCss
        
{
            
get;
            
set;
        }

        
public IList<T> DataSource
        
{
            
get;
            
set;
        }

        
private int mColumns = 1;
        
public int Columns
        
{
            
get
            
{
                
return mColumns;
            }

            
set
            
{
                mColumns 
= value;
            }

        }

        
public Action<DataListItemArgs<T>> ItemBlock
        
{
            
get;
            
set;
        }


    }

    
public class DataListItemArgs<T> : EventArgs
    
{
        
public DataListItemArgs(int index, int row, T source)
        
{
            Index 
= index;
            Row 
= row;
            mSorce 
= source;
        }

        
public int Index
        
{
            
get;
            
set;
        }

        
public int Row
        
{
            
get;
            
set;
        }

        
private T mSorce;
        
public T Source
        
{
            
get
            
{
                
return mSorce;
            }

        }

    }

例程效果 

例程调用代码
 

<%

     DataList<NorthWind.Entities.Files> list = new DataList<Files>();

     list.DataSource = view.Files;

     list.Columns = 4;

     list.ItemBlock = delegate(DataListItemArgs<Files> e)

     {

         %>

     <table style="border-style: dotted;border-width: 1px"><tr><td>

     <img style=" height:150px;width:150px" src="FileLoad.aspx?id=<%=e.Source.ID %>" />

     </td></tr>

     <tr><td><%=e.Source.Description %></td></tr>

     <tr><td><%=e.Source.CreateTime %></td></tr>

      <tr><td><a href="javascript:if(confirm('是否要删除<%=e.Source.Description %>图片?')){document.location.href='FilesDelete.aspx?id=<%=e.Source.ID %>'}">删除</a></td></tr>

     </table>

<%};

     list.Render(Response.Output);    

      %>


演示地址

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值