我想创建一个用户控件DerivedUserControl.ascx
,该控件派生自另一个用户控件BaseUserControl.ascx
。基本用户控件根据需要从System.Web.UI.UserControl
派生。这些用户控件在不同的文件夹中定义。因为我正在使用Visual Studio 2010网站项目(我无法切换到Web应用程序项目),所以这些用户控件未在命名空间内定义。
我的问题是,当我尝试编译项目时,无法解析派生用户控件的基类(显然是因为编译器不知道.ascx文件定义了基类)。有没有办法解决这个问题?
我尝试了我能想象到的一切,没有成功。任何帮助将不胜感激。
BaseUserControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="BaseUserControl.ascx.cs" Inherits="BaseUserControl" %>
BaseUserControl.ascx.cs
public partial class BaseUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
DerivedUserControl.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="DerivedUserControl.ascx.cs" Inherits="DerivedUserControl" %>
DerivedUserControl.ascx.cs
public partial class DerivedUserControl : BaseUserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
错误
The type or namespace name 'BaseUserControl' could not be found
答案 0 :(得分:2)
使用ASP.NET网站(与Web项目相关)时,需要将<@Reference>
元素添加到DerivedUserControl.ascx。
从MSDN开始......
表示另一个用户控件,页面源文件或任意 位于某个虚拟路径的文件应该是动态编译的 链接到当前的ASP.NET文件(网页,用户控件或 声明此指令的主页面。
<%@ Reference VirtualPath="~/FolderName1/BaseUserControl.ascx" %>
完成后,您可以像这样引用它
public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx
其中FolderName1是您的BaseUserControl所在的文件夹。
答案 1 :(得分:1)
为名为BaseUserControl.cs
的基类创建常规类/ .cs:
public class BaseUserControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
答案 2 :(得分:0)
问题似乎是DerivedUserControl.ascx无法访问包含BaseUserControl的DLL。确保添加对dll的引用并复制local = true。
答案 3 :(得分:0)
这不编译:
namespace MyBase
{
public class BaseUserControl : System.Web.UI.UserControl
{ }
}
public class DerivedUserControl : BaseUserControl
{ }
这会编译:
namespace MyBase
{
public class BaseUserControl : System.Web.UI.UserControl
{ }
}
public class DerivedUserControl :MyBase.BaseUserControl
{ }
所以几乎添加名称空间+点的名称+基类的名称。 祝你好运!