Извлечение пользовательского контроля из базового класса пользовательского элемента управления - PullRequest
5 голосов
/ 26 января 2012

Я хочу создать пользовательский элемент управления DerivedUserControl.ascx, производный от другого пользовательского элемента управления BaseUserControl.ascx.Базовый пользовательский элемент управления извлекается из System.Web.UI.UserControl по мере необходимости.Эти пользовательские элементы управления определены в разных папках.Поскольку я использую проект веб-сайта Visual Studio 2010 (я не могу переключиться на проект веб-приложения), эти пользовательские элементы управления не определены в пространстве имен.

Моя проблема заключается в том, что при попыткекомпилировать проект, базовый класс производного пользовательского элемента управления не может быть разрешен (очевидно, потому что компилятор не знает, какой файл .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

Ответы [ 4 ]

2 голосов
/ 26 января 2012

При использовании веб-сайта ASP.NET (применительно к веб-проекту) необходимо добавить элемент <@Reference> в свой DerivedUserControl.ascx.

Из MSDN it ...

Указывает, что другой пользовательский элемент управления, исходный файл страницы или произвольный файл, расположенный на каком-либо виртуальном пути, должен динамически компилироваться и связываться с текущим ASP.NET-файл (веб-страница, пользовательский элемент управления или главная страница), в котором объявлена ​​эта директива.

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

Как только вы это сделаете, вы можете ссылаться на него следующим образом

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx

Где FolderName1 - это папка, в которой находится BaseUserControl.

1 голос
/ 26 января 2012

Создайте обычный класс / .cs для вашего базового класса с именем BaseUserControl.cs:

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

    }
}
0 голосов
/ 26 января 2012

Это не компилируется:

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

Так что в значительной степени добавьте имя пространства имен + точка + имя вашего базового класса.Удачи!

0 голосов
/ 26 января 2012

Проблема заключается в том, что DerivedUserControl.ascx не имеет доступа к библиотеке DLL, содержащей BaseUserControl.Убедитесь, что вы добавили ссылку на dll и имеете копию local = true.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...