此页面上的内容需要较新版本的 Adobe Flash Player。

获取 Adobe Flash Player

  • 网站主页
  • 中心简介
  • 新闻动态
  • 课程详解
  • 师资力量
  • 招生问答
  • 就业广场
  • 在线报名
  • 学习园地
  • 证书查询
  • 唐城论坛
  • 陈老师  程老师  2010年唐城开学典礼 |2010年招生简章 |高考生专区 |中专/职高生专区 |大学生专区 |技术讲座 |春季就业班 |北大青鸟学费
    • 1
    • 2
    • 3
    热点新闻学习园地求职技巧
    北大青鸟IT教育咨询热线:010-65595970
    北大青鸟北京唐城中心开班信息
    报名截止 班级类型 报名情况
    09月24日白领就业班热招中
    09月20日青鸟尖子班热招中
    09月17日高考生特招班余10座
    09月13日高考补录班余5座
    09月10日CBD就业班已满
    北大青鸟唐城中心技术团
    内容:网页设计,3G揭秘等
    时间:每周三 下午13:30
          每周六 下午13:30
    主讲:北大青鸟资深IT专家
    地址:北大青鸟唐城报告厅
    人数:25人
    预约热线:010-65003443

    点击查看详情>>>
    您的位置:北大青鸟首页->新闻动态 -> 学习园地

    在Asp.net MVC中使用Repeater

    发布日期:2010-03-03

        1. Repeater需要手动去绑定数据。 意思是说我们要在View当中写 服务端代码,先从ViewData中取得数据,再去绑定到Repeater。

        2. 如果一个页面用到n+1个Repeater,那会不会疯掉? 而且要给每一个Repeater指定 Id,必去绑数据,头痛啊!!!
        那么~~ 可不可以让Repeater用起来简单点呢? 来对Repeater进行一下改造,达到目的。

        在Mvc当中,使用 ViewData 来传递数据,那可不可以直接让Repeater 绑定 ViewData 中的数据呢? 当然可以

        看改造后的 Repeater 源码:

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Web;
        using System.Web.UI.WebControls;
        using System.Web.Mvc;

        namespace RepeaterInMvc.Codes
        {
            public class MvcRepeater : Repeater
            {
                /// <summary>
                /// ViewData中的键名
                /// </summary>
                public string Key { get; set; }

                /// <summary>
                /// 得到ViewPage对象
                /// </summary>
                protected ViewPage ViewPage
                {
                    get { return base.Page as ViewPage; }
                }

                /// <summary>
                /// 重写Onload事件 用于绑定数据
                /// </summary>
                /// <param name="e"></param>
                protected override void OnLoad(EventArgs e)
                {
                    this.DataSource = this.ViewPage.ViewData[this.Key]; //得到数据源
                    this.DataBind();    //绑定 这样就不用手动写N个绑定了

                    base.OnLoad(e);
               }
            }
        }


        上面的代码做了什么:

        1. 添加了一个公共属性 Key ,表示这个Repeater要绑定 ViewData 中哪一项数据。

        2. 添加了一个保护属性 ViewPage ,指向了当前的 Page 对象 并强制转换成 Mvc 的 ViewPage对象 (因为我们要得到ViewData或其它Mvc相关的上下文信息)

        3. 重写了 OnLoad 事件,重写这个事件,用来绑定数据,免得我们需要在View中手动绑定每一个Repeater,那多烦啊。

        现在我们的目的已经达到了。看看怎么使用吧:

        控制器代码:

                public ActionResult Index()
                {
                    //来点测试数据
                    List<Models.TestInfo> entities = new List<RepeaterInMvc.Models.TestInfo>();

                    entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 1, Name = "Kagilo1", Email = "1@1.com" });
                    entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 2, Name = "Kagilo2", Email = "1@1.com" });
                    entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 3, Name = "Kagilo3", Email = "1@1.com" });
                    entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 4, Name = "Kagilo4", Email = "1@1.com" });
                    entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 5, Name = "Kagilo5", Email = "1@1.com" });

                    ViewData["TestList"] = entities;
                    return View();
                }

        再看看页面代码:

        <%@ Register Assembly="RepeaterInMvc" Namespace="RepeaterInMvc.Codes" TagPrefix="mvc" %>

        <asp:Content ID="indexTitle" ContentPlaceHolderID="TitleContent" runat="server">
            Home Page
        </asp:Content>

        <asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
            <h2>Repeater示例</h2>
            <p>
               <mvc:MvcRepeater Key="TestList" runat="server">
                    <ItemTemplate>
                        <div style="height:30px; line-height:30px;"><%# Eval("Id") %>, <%# Eval("Name") %>, <%# Eval("Email") %></div>
                    </ItemTemplate>
                    <AlternatingItemTemplate>
                        <div style="height:30px; line-height:30px; background:#eeeeee;"><%# Eval("Id") %>, <%# Eval("Name") %>, <%# Eval("Email") %></div>
                    </AlternatingItemTemplate>
                </mvc:MvcRepeater>
            </p>
        </asp:Content>


        TPS :<%@ Register Assembly="RepeaterInMvc" Namespace="RepeaterInMvc.Codes" TagPrefix="mvc" %>

        在当前页面注册控件!!!   当然,你也可以在 web.config 中的 page/controls 节点中为所有页面注册。

    在线报名
     姓名 *:
     性别: 男 女
     年龄*:
     学历*:
     课程: 脱产班 业余班
     您所在地区:
     联系电话*:  
     学习人员:  
     你的状态*: 上学 工作 待业
     您现在哪里上网: 网吧 学校 家里 单位
     您知道本网站的途径*:
    百度 GOOGLE TOM 新浪 搜狐 雅虎 搜狗 贴吧
    社区活动 宣传页 报纸刊物 马路广告牌 朋友介绍 其他网站
     请您留言:
        



    友情链接:广州北大青鸟西安北大青鸟北京北大青鸟北京北大青鸟教育培训武汉北大青鸟福州北大青鸟洛阳北大青鸟广州投资策划播音主持培训够级武汉北大青鸟徐州北大青鸟二级建筑师网珠海培训网安徽北大青鸟深圳北大青鸟苏州北大青鸟北大青鸟西安毕诚郑州北大青鸟北大青鸟徐州北大青鸟
    招生简章|招聘信息|北大青鸟地址|中心地图|在线报名|北大青鸟怎么样
    北京亿网互动科技有限公司版权所有
    地址:北京市朝阳区红庙北里64号楼(北大青鸟院内)
    电话:010-65003443
    传真:010-65000071-6802
    京ICP备08003493号
    本站关键词:

    北京北大青鸟

     

    北大青鸟

      北大青鸟总部