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