首页 | 社区 | 博客 | 招聘 | 文章 | bet365足球场 | 下载 | 读书 | 代码
亲,您未登录哦! 登录 | 注册

在Asp.net MVC中使用Repeater

打印文章

分享到:
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
????????{
????????????///?
????????????///?ViewData中的键名
????????????///?

????????????public?string?Key?{?get;?set;?}

????????????///?
????????????///?得到ViewPage对象
????????????///?

????????????protected?ViewPage?ViewPage
????????????{
????????????????get?{?return?base.Page?as?ViewPage;?}
????????????}

????????????///?
????????????///?重写Onload事件?用于绑定数据
????????????///?

????????????///?
????????????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?entities?=?new?List();

????????????????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"?%>

????
????????Home?Page
????

????
????????

Repeater示例


????????


???????????
????????????????
????????????????????<%#?Eval("Id")?%>,?<%#?Eval("Name")?%>,?<%#?Eval("Email")?%>


????????????????
????????????????
????????????????????<%#?Eval("Id")?%>,?<%#?Eval("Name")?%>,?<%#?Eval("Email")?%>

????????????????
????????????
????????
????


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

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

本栏文章均来自于互联网,版权归原作者和各发布网站所有,本站收集这些文章仅供学习参考之用。任何人都不能将这些文章用于商业或者其他目的。( Pfan.cn )

编程爱好者论坛

本栏最新文章