2012-01-26 5 views
5

Chcę utworzyć kontrolkę użytkownika DerivedUserControl.ascx, która wywodzi się z innej kontrolki użytkownika BaseUserControl.ascx. Podstawowa kontrola użytkownika pochodzi od System.Web.UI.UserControl zgodnie z wymaganiami. Te elementy sterowania użytkownika są zdefiniowane w różnych folderach. Ponieważ używam projektu witryny sieci Web Visual Studio 2010 (nie mogę przejść do projektu aplikacji sieci Web), te elementy sterowania użytkownika nie są zdefiniowane w obszarze nazw.Sterowanie użytkownikami pochodnymi z niestandardowej klasy bazowej sterowania użytkownika

Mój problem polega na tym, że podczas próby kompilacji projektu nie można ustalić klasy bazowej pochodnej kontrolki użytkownika (oczywiście dlatego, że kompilator nie wie, jaki plik .ascx definiuje klasę podstawową). Czy istnieje sposób na rozwiązanie tego problemu?

Próbowałem wszystkiego, co mogłem sobie wyobrazić, bez powodzenia. Każda pomoc będzie bardzo ceniona.

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

    } 
} 

Błąd

The type or namespace name 'BaseUserControl' could not be found 

Odpowiedz

2

Podczas korzystania z witryny sieci Web ASP.NET (zgodnie z projektem WWW) należy dodać element <@Reference> do pliku DerivedUserControl.ascx.

Od MSDN to ...

Wskazuje, że kolejna kontrola użytkownika, strona pliku źródłowego lub arbitralne plik znajduje się na jakimś wirtualnym ścieżki powinny być kompilowane dynamicznie i zlinkowana pliku prąd ASP.NET (Strona internetowa, kontrola użytkownika lub strona wzorcowa ), w której zadeklarowano tę dyrektywę.

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

Po wykonaniu, że można odwołać się go jak tak

public partial class DerivedUserControl : ASP.foldername1.baseusercontrol_ascx 

Gdzie FolderName1 to folder Twój BaseUserControl jest.

+0

Wow, te wydają się działać przy użyciu 'ASP.base_baseusercontrol_ascx'. – CodeZombie

+0

Przyjmuję, że 'base' to nazwa folderu, w którym znajduje się BaseUserControl.ascx. –

+0

Wielkie dzięki, naprawdę uratowałeś mój dzień: D – CodeZombie

0

Problem wydaje się, że DerivedUserControl.ascx nie mają dostępu do biblioteki DLL, która zawiera BaseUserControl. Upewnij się, że dodasz odwołanie do biblioteki dll i skopiujesz local = true.

+0

Używam projektu witryny sieci Web, więc nie dostaję skompilowanego zestawu (dll), mógłbym odwołać. – CodeZombie

+0

Spróbuj umieścić ścieżkę w Dziedzicach, aby mógł znaleźć kod, który nie znajduje się w tej samej tablicy. –

+0

W projekcie * WebSite * zespoły są generowane dynamicznie –

0

nie kompilacji:

namespace MyBase 
{ 
    public class BaseUserControl : System.Web.UI.UserControl 
    { } 
} 
public class DerivedUserControl : BaseUserControl 
{ } 

To nie kompilacji:

namespace MyBase 
{ 
    public class BaseUserControl : System.Web.UI.UserControl 
    { } 
} 
public class DerivedUserControl :MyBase.BaseUserControl 
{ } 

Więc dość dużo dodać nazwę przestrzeni nazw + kropka + imię swojej klasy bazowej. Powodzenia!

+0

Nie ma przestrzeni nazw ustawionych domyślnie za pomocą projektów witryny sieci Web. – CodeZombie

1

Tworzenie regularnych klasa /. cs dla Twojej klasy bazowej o nazwie BaseUserControl.cs:

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

    } 
} 
+0

To byłoby dobre rozwiązanie. Niestety nie mogę zmodyfikować klasy bazowej, ponieważ jest częścią CMS. – CodeZombie

+0

To jest technicznie poprawna poprawka w różnych okolicznościach. – Patrick

Powiązane problemy