<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      動態加載用戶控件的組件!

      [摘要]我們寫用戶控件的目的就是放到頁面中去。根據不同的條件,我們可以改變加載的用戶控件!其實原理就是MasterPage的原理。這個MasterPage會在vs2005中提供,但是現在也可以實現。在我的項...
      我們寫用戶控件的目的就是放到頁面中去。根據不同的條件,我們可以改變加載的用戶控件!

      其實原理就是MasterPage的原理。這個MasterPage會在vs2005中提供,但是現在也可以實現。

      在我的項目中就用到:



      MasterPage就四個類,其中容器就動態加載用戶控件。這種功能在vs2005中將無處不在。

      下面簡單介紹一下動態加載葉面組件:

      我們只需要改變用戶組件的地址就可以動態改變加載的用戶組件了。

      在程序中動態改變SkinPath就可以了。

      組件源碼如下:

      using System;
      //using System.Drawing;
      using System.Collections;
      using System.Collections.Specialized;
      using System.Web;
      using System.Web.UI;
      using System.Web.UI.WebControls;
      using System.ComponentModel;
      using System.IO;
      using System.Web.Security;
      using Region.Components;

      namespace Region.Controls {

      [ParseChildren(true)]
      /// <summary>
      /// 頁面組件,從用戶組件獲取
      /// </summary>
      public abstract class SkinnedControl : WebControl, INamingContainer {

      string skinFilename = null;
      string skinName = null;
      string skinPath;

      // string returnURL = null;

      /// <summary>
      /// 添加子組件
      /// </summary>
      protected override void CreateChildControls() {
      if(SkinPath == null SkinPath == "" SkinPath.Trim() == "")
      return ;
      Control skin;
      skin = LoadSkin();
      InitializeSkin(skin);
      Controls.Add(skin);
      }

      /// <summary>
      /// 獲取摸板組件
      /// </summary>
      /// <returns>組件</returns>
      protected Control LoadSkin()
      {
      Control skin;
      try
      {
      skin = Page.LoadControl(SkinPath);
      }
      catch (FileNotFoundException)
      {
      throw new Exception("找不到文件:[ " + SkinPath + " ] .");
      }
      return skin;
      }

      /// <summary>
      /// 初始化組建摸板
      /// </summary>
      /// <param name="skin">組件</param>
      protected abstract void InitializeSkin(Control skin);


      /// <summary>
      /// 用戶組件名稱
      /// </summary>
      public string SkinFilename
      {
      get
      {
      return skinFilename;
      }
      set
      {
      skinFilename = value;
      }
      }

      /// <summary>
      /// 組件名稱
      /// </summary>
      protected string SkinName
      {
      get
      {
      return skinName;
      }
      set
      {
      skinName = value;
      }
      }

      /// <summary>
      /// 用戶組件相對路徑及組件名稱
      /// </summary>
      public string SkinPath
      {
      get
      {
      return skinPath;
      }
      set
      {
      skinPath = value;
      SkinFilename = value.TrimStart('/');

      }
      }




      }
      }


      比如我的一個應用:

      switch (context.PageId)
      {
      case "1_1" :
      base.SkinPath = "~/Themes/SignManager/TermList.ascx";
      break ;
      case "1_1_1" :
      base.SkinPath = "~/Themes/SignManager/TermEdit.ascx";
      break ;
      case "1_2" :
      base.SkinPath = "~/Themes/SignManager/MemberList.ascx";
      break ;

      case "1_2_1" :
      base.SkinPath = "~/Themes/SignManager/MemberEdit.ascx";
      break ;
      case "2_1" :
      base.SkinPath = "~/Themes/SignManager/CardSend.ascx";
      break ;
      case "3_1" :
      base.SkinPath = "~/Themes/SignManager/MemberNoEdit.ascx";
      break ;
      case "4_1" :
      base.SkinPath = "~/Themes/AcountEdit.ascx";
      break ;
      default :
      base.SkinPath = "";
      break;
      }



      基于組建的開發,我們可省去葉面上很多重復性的地方。只需在重復葉面的地方引用組件就可以了

      比如:



      這樣我們就可以 以用戶組件為元素,組件不同的葉面。葉面也可以重用!





      日韩精品一区二区三区高清