Asp.net

在asp.net網站中動態載入使用者控制項(ascx)

  • June 17, 2014

我正在嘗試在 asp.web 站點中動態載入使用者控制項。但是,由於 asp.net 網站項目的設置方式(我認為),我無法訪問達到使用者控制項的類型定義。

我收到一條消息,說我的類 HE_ContentTop_WebControl1 是:找不到他的類型或命名空間名稱“HE_ContentTop_WebControl1”(您是否缺少 using 指令或程序集引用?)

知道如何使它起作用嗎?我曾嘗試使用命名空間,但在我看來,asp.net 網站在預設情況下並非旨在使用命名空間。我會對非命名空間方法感興趣。

TIA

public partial class HE_Default :
    System.Web.UI.Page   {  

   protected void Page_Load(object sender, EventArgs e)  
   {  
      var control = (HE_ContentTop_WebControl1)Page.LoadControl("~/ContentTop/WebControl1.ascx");         
   }
}

假設控制項與您的 Web 項目存在於同一個程序集中,您需要在 .aspx 文件中添加一個引用指令,

例如:

<%@ Reference Control="~/Controls/WebControl1.ascx">

請記住,IntelliSense 通常需要幾分鐘(或有時是建構)才能獲取此資訊。

它可以使用命名空間輕鬆完成。這是一個例子:

WebControl1.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebControl1.ascx.cs" Inherits="MyUserControls.WebControl1" %>

請注意,Inherits引用命名空間 (MyUserControls),而不僅僅是類名 (WebControl1)

WebControl1.ascx.cs:

namespace MyUserControls
{
   public partial class WebControl1 : System.Web.UI.UserControl
   {
       protected void Page_Load(object sender, EventArgs e)
       {

       }
   }
}

請注意,該類已包含在命名空間 MyUserControls 中

預設.aspx.cs:

using MyUserControls;

public partial class _Default : System.Web.UI.Page 
{
   protected void Page_Load(object sender, EventArgs e)
   {
       var control = (WebControl1) Page.LoadControl("~/WebControl1.ascx");
   }
}

這種方法可能允許您重新分發您的使用者控制項(或將它們保存在單獨的項目中),而無需在 .aspx 文件中引用它們。

引用自:https://stackoverflow.com/questions/1290592