2011-03-02 7 views
1

"asp.net"응용 프로그램에서 "Controls"라는 폴더를 만들었습니다. 해당 폴더에는 사용자 정의 컨트롤 (예 : DateRangePicker.ascx)이 있습니다. 지금은 내 응용 프로그램 코드 폴더에 클래스를 생성하고 있는데는 DateRangePicker에 뭔가를 캐스팅 네임 스페이스 문제 .net

DateRangePicker drp = (CambitCMS.Controls.DateRangePicker)gvListing.Parent.Parent.FindControl("ucDateRangePicker"); 

을 시도하고있다 그리고 나는 다음과 같은 오류가 점점 오전 : 오류 2 형식 또는 네임 스페이스 이름 '컨트롤'하지 않습니다 네임 스페이스 'CambitCMS'에 있습니다 (어셈블리 참조가 누락 되었습니까?)

클래스에서이 사용자 정의 컨트롤을 올바르게 참조하려면 어떻게합니까?

내 "ListingsBasePage"클래스에서 내 DateRangePicker usercontrol을 참조하고 싶지만 전체 사용자 컨트롤 코드 주위에 네임 스페이스를두면 사용자 정의 컨트롤이 깨져서 텍스트 상자, 레이블 등과 같은 모든 것들이 존재하지 않습니다. 네임 스페이스가 코드 주위를 감싸는 경우 현재 컨텍스트 여기

내가 UserControl을

using System; 
using System.Data; 
using System.Configuration; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 



public partial class ListingsBasePage : System.Web.UI.Page 
{ 

    protected void gvListing_OnPreRender(object sender, EventArgs e) 
    { 

     protected void gvListing_OnPreRender(object sender, EventArgs e) 
     { 

      GridView gvListing = (GridView)sender; 
      DateRangePicker drp = (CambitCMS.Controls.DateRangePicker)gvListing.Parent.Parent.FindControl("ucDateRangePicker"); 
      gvListing.PageSize = drp.recordsPerPage; 
     } 
    ........ 

를 참조 할 triyng하고있는 클래스 "ListingsBasePage"의 시작과 DatRangePickerControl

using System; 
using System.Web.UI.HtmlControls; 
using System.Web.UI; 
using System.Web.UI.WebControls; 


    public partial class Controls_DateRangePicker : System.Web.UI.UserControl 
    { 
     public String FromDate 
     { 
      get 
      { 
       return tbFromDate.Text; 
      } 
     } 
+0

어떤 유형의 ASP.NET 프로젝트를 웹 사이트 또는 응용 프로그램 프로젝트에서 사용하고 있습니까? – IrishChieftain

+0

asp.net 웹 사이트 –

+0

DateRangePicker 코드의 처음 몇 줄을 게시 할 수 있습니까? 특히 네임 스페이스와 클래스 정의. –

답변

2

이것은 웹 사이트 프로젝트에서 다시 한 번 나타납니다. 웹 사이트 프로젝트에는 네임 스페이스 개념이 없으며 참조 컨트롤은 문제가 될 수 있습니다.

http://west-wind.com/weblog/posts/3016.aspx

http://forums.asp.net/p/1035070/1428363.aspx

http://www.codersbarn.com/post/2008/06/ASPNET-Web-Site-versus-Web-Application-Project.aspx

은을 App_Code에 사용자 정의 컨트롤을 넣어보세요 (공개는,이 마지막 링크는 내 자신의 블로그) : 첫 번째 링크에 의견의 일부를 통해 이동 폴더. 더 나은 방법으로 웹 응용 프로그램 프로젝트를 대신 사용하면이 문제를 피할 수 있습니다.개인적으로,이

http://odetocode.com/blogs/scott/archive/2005/10/01/asp-net-2-0-user-controls-in-app_code.aspx

: 웹 사이트 프로젝트에서 사용자 컨트롤에 액세스 할 수있는 문제를 해결

UPDATE

한 가지 방법은 다음 App_Code 폴더의 사용자 정의 컨트롤을 넣어 코드를 인라인하는 것입니다 기껏해야 부주의 한 해킹이며 Microsoft는 권장하지 않으며, 권장하지 않습니다.

http://msdn.microsoft.com/en-us/library/t990ks23.aspx

(.cs)를 사용하여 사용자 지정 서버 컨트롤로 만들고이를 App_Code 폴더에 넣습니다. 이것은 참조하는 문제를 해결해야합니다. 궁극적으로, 웹 사이트 프로젝트는 진지한 작업을위한 것이 아니며, 이것이 왜 한 가지 이유 일뿐입니다. 가장 좋은 방법은 웹 응용 프로그램 프로젝트로 구축하는 것입니다. 웹 사이트 템플릿을 선택하는 논리적 인 이유는 생각할 수 없습니다 (컴파일 최적화는 WAP에서도 가능합니다).

+0

앱 코드 폴더에있는 사용자 정의 컨트롤을 사용자에게 알려주지 않습니다. –

+0

웹 응용 프로그램 프로젝트에서이 시나리오를 테스트 해보십시오. 웹 사이트 프로젝트 템플릿 문제 ... – IrishChieftain

+0

웹 사이트 프로젝트에서 잘 작동합니다. 그들은 프로젝트를 웹 사이트 앱으로 변환하기를 원합니다. 이 클래스에는 사용자 컨트롤 "DateRangePicker"에 캐스트가 있지만 웹 사이트에서 참조 할 수있는 방법을 찾을 수 없습니다. 클래스가 app 코드 폴더에 있고 userControls가 "Controls"라는 폴더에 있습니다. –

0

의 시작입니다 "DateRangePicker.ascx.cs합니까 ""CambitCMS.Controls.DateRangePicker "클래스 또는"CambitCMS.DateRangePicker "클래스를 구현합니까? 이름 지정이 올바른지 확인하는 것이 여기 하나의 요점입니다. 컴파일러가 오류를보고하는 이유


는 "Controls_DateRangePicker"가 "CambitCMS.Controls.DateRangePicker"와 동일하지 않습니다이다. 두 파일에서 같은 클래스 이름을 사용하면 좋겠지 만 지금은 그런 식으로 보이지 않습니다. 웹 사이트는 웹 응용 프로그램으로 설정되어있는 경우 인텔리 당신이를 업데이트해야합니까 뒤에 당신이 C# 코드에서 변경할 경우 클래스 이름을 선택할 수 있도록


, 그것은 컴파일 할 수 있습니다. ascx 파일은 다른 오류가있는 위치입니다.

+0

위의 내용을 참조하십시오. –

+0

편집했습니다. Controls_DateRangePicker가 인텔리 센스가 아닌 이유가 있습니다. –