<code id="lcjj3"></code><mark id="lcjj3"></mark>

          <output id="lcjj3"></output>
          首页 | 社区 | 博客 | 招聘 | 文章 | 新闻 | 下载 | 读书 | 代码
          亲,您未登录哦! 登录 | 注册

          在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
                  {
                      /// <summary>
                      /// ViewData中的键名
                      /// </summary>
                      public string Key { get; set; }

                      /// <summary>
                      /// 得到ViewPage对象
                      /// </summary>
                      protected ViewPage ViewPage
                      {
                          get { return base.Page as ViewPage; }
                      }

                      /// <summary>
                      /// 重写Onload?#24405;?nbsp;用于绑定数据
                      /// </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 ,指向?#35828;?#21069;的 Page 对象 并强制转换成 Mvc 的 ViewPage对象 (因为我们要得到ViewData或其它Mvc相关的上下文信息)

              3. 重写了 OnLoad ?#24405;?#37325;写这个?#24405;?#29992;来绑定数据,免得我们需要在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 = "[email protected]" });
                          entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 2, Name = "Kagilo2", Email = "[email protected]" });
                          entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 3, Name = "Kagilo3", Email = "[email protected]" });
                          entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 4, Name = "Kagilo4", Email = "[email protected]" });
                          entities.Add(new RepeaterInMvc.Models.TestInfo { Id = 5, Name = "Kagilo5", Email = "[email protected]" });

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

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

          编程爱好者论坛

          本栏最新文章

          时时彩软件下载
          <code id="lcjj3"></code><mark id="lcjj3"></mark>

                  <output id="lcjj3"></output>
                  <code id="lcjj3"></code><mark id="lcjj3"></mark>

                          <output id="lcjj3"></output>