从自定义用户控件基类派生用户控件

本文关键字:控件 用户 派生 基类 自定义 | 更新日期: 2023-09-27 18:21:26

我想创建一个从另一个用户控件BaseUserControl.ascx派生的用户控件DerivedUserControl.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

从自定义用户控件基类派生用户控件

使用ASP.NET网站(适用于Web项目)时,需要将<@Reference>元素添加到DerivedUserControl.ascx.

从MSDN它…

指示其他用户控件、页面源文件或任意应动态编译位于某个虚拟路径上的文件,并且链接到当前ASP.NET文件(网页、用户控件或母版页)。

<%@ Reference VirtualPath="~/FolderName1/BaseUserControl.ascx" %>

一旦你做到了,你可以像一样引用它

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx

其中FolderName1是BaseUserControl所在的文件夹。

为基类创建一个名为BaseUserControl.cs:的常规类/.cs

public class BaseUserControl : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

问题似乎是DerivedUserControl.ascx无法访问包含BaseUserControl的DLL。请确保添加对dll的引用,并使副本local=true。

这不会编译:

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
{ }

因此,几乎可以添加名称空间的名称+点+基类的名称。祝你好运