熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

在Asp.net MVC中使用Repeater

2013-11-13 10:14:17  來源: .NET編程 

   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 節點中為所有頁面注冊


From:http://tw.wingwit.com/Article/program/net/201311/13005.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.