Asp.net
在asp.net網站中動態載入使用者控制項(ascx)
我正在嘗試在 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 文件中引用它們。