我试图在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");
}
}
Run Code Online (Sandbox Code Playgroud)
jsc*_*arf 10
假设控件存在于与Web项目相同的程序集中,则需要在.aspx文件中添加引用指令,
例如:
<%@ Reference Control="~/Controls/WebControl1.ascx">
Run Code Online (Sandbox Code Playgroud)
请记住,智能感知通常需要几分钟(或有时是构建版本)来进行选择.
可以使用命名空间轻松完成.这是一个例子:
WebControl1.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebControl1.ascx.cs" Inherits="MyUserControls.WebControl1" %>
Run Code Online (Sandbox Code Playgroud)
请注意,Inherits引用了命名空间(MyUserControls),而不仅仅是类名(WebControl1)
WebControl1.ascx.cs:
namespace MyUserControls
{
public partial class WebControl1 : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,该类已包含在命名空间MyUserControls中
Default.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");
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法可能允许您重新分发用户控件(或将它们保存在单独的项目中),而无需在.aspx文件中引用它们.
| 归档时间: |
|
| 查看次数: |
57892 次 |
| 最近记录: |