2009-03-13 8 views
2

그래서 나는이 프로젝트에서 일하고 있어요 모든 (매우 깨끗하고 깔끔한 것 같다) user controls registered in its web.config file동적으로 추가하는 사용자 컨트롤의 web.config에 등록

(여기에 문제가 온다) 그러나 I를 지금까지 너무 좋아 페이지에 사용자 정의 컨트롤을 동적으로 만들고 추가하려고합니다. 이러한 사용자 컨트롤은 처리가 필요한 이벤트를 발생시킵니다.

일반적으로 문제가되지 않습니다. 페이지에 컨트롤을 등록하고 컨트롤을로드하고 올바른 형식으로 캐스트 한 다음 이벤트 처리기를 할당하고 페이지에 추가 한 다음 다시 앉아서 마술은 쉽게 일어난다.

그러나 컨트롤이 web.config에 등록되어있을 때 컨트롤의 형식을 참조 할 수 없습니다. 즉, 캐스트가 없으므로 이벤트 처리가 필요하지 않습니다.

디자인 타임에 페이지에 usercontrol을 추가하면 이상하게도 형식을 참조 할 수 있습니다!

페이지의 컨트롤을 등록하거나 디자인 타임에 컨트롤을 추가 할 필요없이이 과정을 반복해야합니다. 실종 된 부분은 무엇입니까?

당신이 뜻이 페이지의 상단에 <%의 @ 레지스터 %> 지시문을 추가 "당신이 디자인 타임에 페이지에 UserControl을 추가 할 경우 유형을 참조 할 수 있습니다"라고하여

답변

2

그것은 오랜만이야,하지만 난 프로젝트가 웹 응용 프로그램이 아니라 웹 응용 프로그램 일 때 ASP.NET에서 이러한 유형의 동작을 본 것으로 생각하십시오. 내가 아는 한 웹 사이트는 각 페이지를 자체 어셈블리로 컴파일하고 일반 이름 공간이 없으며 구성에 관계없이 < % @ Register %> 지시어가 필요합니다. 그렇지 않으면 어셈블리 참조가 누락 된 정확한 오류가 발생합니다.

내가 확실하게 테스트 할 것

...

, 등록이의 Web.config ( )에서 수행되는 이상한 일이 그래서 <% @ 등록 %에 대한 필요가없는
+0

각 페이지를 컴파일하는 웹 사이트가 자신 만의 어셈블리입니다. web.config에 컨트롤을 등록하면 정상적으로 작동합니다. 그러나 컨트롤이 작동하려면 별도의 어셈블리로 정의해야합니다. 직장에서는 웹 사이트 프로젝트에서 telerik의 컨트롤을 사용하며 정상적으로 작동합니다. – Martin

+0

당신은 절대적으로 옳았습니다. 단지 빠른 테스트를 수행했고 웹 애플리케이션에서 정상적으로 작동했으며 웹 사이트에서 비참하게 실패했습니다. 고마워! –

0

?

또는 어쩌면 소스 문서에/imports (C#/vb.net 사용에 따라 다름) 절을 추가합니까?

컨트롤 유형으로 변환 할 수 있으려면 일반적으로 코드 바인딩의 네임 스페이스를 가져와야하기 때문입니다. 어쩌면 이것은 그냥 놓친 것일 수도 있습니다.

+0

없음 > 지시문을 사용하십시오. 페이지에서 사용자 정의 컨트롤을 드래그하면 모든 것이 작동하기 시작합니다 (<% @ Register %> 또는 포함을 추가하지 않음) –

0

< > web.config의 컨트롤과 < % @ Register %> 지시어는 같은 것입니다. web.config의 항목이 전체 응용 프로그램에 적용된다는 예외는 조금 있습니다. 웹 양식에 디자인 타임 컨트롤을 추가 할 수 있습니다.

페이지에 컨트롤을 동적으로 추가하려면 LoadControl 함수를 사용하여 컨트롤의 인스턴스를 가져옵니다. "헤더"의 클래스 이름을 가진 컨트롤을 감안할 때, 다음은 컨트롤을로드 속성을 설정 및 명명 된 폼에 컨트롤을 추가, "Form1을"합니다

Dim head As Header = LoadControl("~/Controls/Header.ascx") 
    head.Text = "Some text..." 
    Me.form1.Controls.Add(head) 
+0

정확히 예상했던대로입니다. 그러나 "형식 또는 네임 스페이스 이름 'Header' 찾을 수 없습니다 (사용 지시문이나 어셈블리 참조가 누락 되었습니까?) " (이상한 것은 페이지에 머리글 컨트롤 태그를 추가하면됩니다. ] 잘 작동합니다!) –

관련 문제