在Asp.net MVC中使用Repeater

  • 时间:
  • 浏览:38
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 )

猜你喜欢