asp.net

位置:IT落伍者 >> asp.net >> 浏览文章

在Asp.net MVC中使用Repeater


发布日期:2019年01月11日
 
在Asp.net MVC中使用Repeater

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

如果一个页面用到n+个Repeater那会不会疯掉? 而且要给每一个Repeater指定 Id必去绑数据头痛啊!!!

那么~~ 可不可以让Repeater用起来简单点呢? 来对Repeater进行一下改造达到目的

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

看改造后的 Repeater 源码

using System;

using SystemCollectionsGeneric;

using SystemLinq;

using SystemWeb;

using SystemWebUIWebControls;

using SystemWebMvc;

namespace RepeaterInMvcCodes

{

public class MvcRepeater : Repeater

{

/// <summary>

/// ViewData中的键名

/// </summary>

public string Key { get; set; }

/// <summary>

/// 得到ViewPage对象

/// </summary>

protected ViewPage ViewPage

{

get { return basePage as ViewPage; }

}

/// <summary>

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

/// </summary>

/// <param name=e></param>

protected override void OnLoad(EventArgs e)

{

thisDataSource = thisViewPageViewData[thisKey]; //得到数据源

thisDataBind(); //绑定 这样就不用手动写N个绑定了

baseOnLoad(e);

}

}

}

上面的代码做了什么

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

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

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

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

控制器代码

public ActionResult Index()

{

//来点测试数据

List<ModelsTestInfo> entities = new List<RepeaterInMvcModelsTestInfo>();

entitiesAdd(new RepeaterInMvcModelsTestInfo { Id = Name = Kagilo Email = });

entitiesAdd(new RepeaterInMvcModelsTestInfo { Id = Name = Kagilo Email = });

entitiesAdd(new RepeaterInMvcModelsTestInfo { Id = Name = Kagilo Email = });

entitiesAdd(new RepeaterInMvcModelsTestInfo { Id = Name = Kagilo Email = });

entitiesAdd(new RepeaterInMvcModelsTestInfo { Id = Name = Kagilo Email = });

ViewData[TestList] = entities;

return View();

}

再看看页面代码

<%@ Register Assembly=RepeaterInMvc Namespace=RepeaterInMvcCodes TagPrefix=mvc %>

<asp:Content ID=indexTitle ContentPlaceHolderID=TitleContent runat=server>

Home Page

</asp:Content>

<asp:Content ID=indexContent ContentPlaceHolderID=MainContent runat=server>

<h>Repeater示例</h>

<p>

<mvc:MvcRepeater Key=TestList runat=server>

<ItemTemplate>

<div ><%# Eval(Id) %> <%# Eval(Name) %> <%# Eval(Email) %></div>

</ItemTemplate>

<AlternatingItemTemplate>

<div ><%# Eval(Id) %> <%# Eval(Name) %> <%# Eval(Email) %></div>

</AlternatingItemTemplate>

</mvc:MvcRepeater>

</p>

</asp:Content>

TPS <%@ Register Assembly=RepeaterInMvc Namespace=RepeaterInMvcCodes TagPrefix=mvc %>

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

               

上一篇:asp.net 学习笔记

下一篇:ASP.NET Web Page应用深入探讨