2011-08-15 6 views
17

Otrzymuję błąd poniżej podczas próby budowania projektu strony internetowej w Visual Studio 2010:błąd ASP.NET: Strona Y.ascx nie można używać kontrolę użytkownika X.ascx

strona „/ WebSite /controls/C2.ascx "nie może używać kontrolki użytkownika" /WebSite/controls/C1.ascx ", ponieważ jest zarejestrowany w pliku web.config i znajduje się w tym samym katalogu, co strona.

mam 2 formanty użytkownika web:

controls/C1.ascx 
controls/C2.ascx 

kontrole zostały zarejestrowane w pliku web.config:

<configuration> 
    <system.web> 
     <pages> 
      <controls> 
       <add src="~/controls/C1.ascx" tagPrefix="my" tagName="C1"/> 
       <add src="~/controls/C2.ascx" tagPrefix="my" tagName="C2"/> 
      </controls> 
     </pages> 
    </system.web> 
</configuration> 

C1.ascx zawiera tylko statyczny HTML, C2.ascx stara Aby dołączyć C1:

C1.ascx zawiera tylko zwykły statyczny prosty HTML. C2.ascx próbuje zawierać C1.ascx:

<%@ Control Language="VB" %> 
<my:C1 runat="server" /> 
<p>Hello from C2</p> 

Podczas próby budowania projektu, otrzymuję komunikat o błędzie na szczycie. Zdaję sobie sprawę, problem ten można rozwiązać dodając kolejną dyrektywę zarejestruj aby C2.ascx ...:

<%@ Register Src="~/controls/C1.ascx" TagPrefix="ctl" TagName="C1" %> 

... ale zastanawiam się, czy jest czystsze rozwiązanie i dlaczego otrzymuję błąd w pierwszym miejsce?

Dzięki!

+0

możliwe duplikat [użytku kontrolą użytkownika w tym samym folderze strony] (http://stackoverflow.com/questions/2964337/use-user-control-in-the-same-folder-as-the-page) – M4N

+0

Czy istnieje powód, dla którego <% @ Register ...%> jest uważany za "nieczysty"? Wydaje się nie różni się od konieczności używając stwierdzenia u góry pliku .cs. – mikemanne

+0

Uważa się, że jest nieczysty tylko wtedy, gdy kontrola jest już zarejestrowana w pliku web.config dla każdej strony lub kontrolki internetowej, co jest moim przypadkiem. – michalstanko

Odpowiedz

25

Twoje tylko możliwe rozwiązania to:

  • przesuwaj dźwignię z katalogu obecnie jego wymiany z outer.ascx lub
  • ponownie zarejestrować kontrolę wewnątrz outer.ascx jak ty już wspomniano
  • ponownie zapisać je w kodzie jako kontrole w oddzielnej bibliotece

osobiście uważam ruchu to najprostszy, czy to będzie działać dla swoich rozwiązań. Druga byłaby ponowna rejestracja, nawet denerwująca. Przeniesienie ich do pełnej biblioteki kodowej prawdopodobnie nie jest warte wysiłku, jeśli jest to jedyny powód, dla którego to robisz.

+4

ponownej rejestracji jest najlepszym rozwiązaniem dla mnie, nie chcę, aby przenieść elementy sterujące użytkownika do innego podkatalogu tylko dlatego ASP.NET działa dziwnie czasami. Dzięki. – michalstanko

+3

Co za głupi błąd. Re rejestracji działa na mnie też. – TheGateKeeper

5

Można również umieścić kontrolki w różnych folderach. Ale nie sądzę, to jest znacznie czystsze i lepiej.

BTW: to zachowanie jest zgodne z projektem, ponieważ można przeczytać on this MSDN page (poszukaj żółtej notatki prawie na końcu strony).

Powiązane problemy