知识屋:更实用的电脑技术知识网站
所在位置:首页 > 编程技术 > ASP编程

在Asp.net MVC中使用Repeater

发布时间:2011-02-18 19:43:07作者:知识屋


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 节点中为所有页面注册。

 

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜