在Asp.net MVC中使用Repeater

浏览:39日期:2023-04-15

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

相关文章: