2010-01-05 4 views
38

리터럴 컨트롤에서 상속하는 사용자 지정 컨트롤을 만들었습니다. 페이지에서 내 컨트롤을 사용하려고하면 구문 분석 오류가 발생합니다. 내 Web.config의ASP.NET 사용자 지정 컨트롤 - 알 수없는 서버 태그

<configuration> 
    <system.web> 
    <pages> 
     <controls> 
     <add tagPrefix="one" namespace="myApplication.Controls"/> 
     </controls> 
    </pages> 
    </system.web> 
</configuration> 

이 추가되었습니다 그리고 난 내 페이지 이들 중 어느 쪽이 문제를 해결 한

<%@ register namespace="myApplication.Controls" tagprefix="one" %> 

이 추가되었습니다. 내 프로젝트 내에서 제대로 작동하는 일부 사용자 지정 컨트롤이있는 외부 어셈블리가 있습니다. 해결 방법으로, 간단한 해결책이 없다면 외부 라이브러리로 사용자 정의 컨트롤을 옮길 것을 고려 중입니다.

- 편집자

다음은 페이지 코드입니다.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SignUp.ascx.cs" Inherits="myApplication.Controls.SignUp" %> 
<%@ register namespace="myApplication.Controls" tagprefix="one" %> 
<div class="in"> 
    <span>  
     <one:resourceliteral id="lblFirstname" runat="server" resourcekey="FirstName" resourceresolver="ResourceStringResolver.GetResourceString"> 
     </one:resourceliteral>  
     </span> 
    <div> 
     <pl:textbox id="txtFirstName" runat="server"></pl:textbox> 
    </div> 
</div> 

그리고 여기 내 실제 제어

namespace myApplication.Controls 
{ 
    public class ResourceLiteral : Literal 
    { 
     private ResourceManager rm; 

     public delegate string dResourceResolver(string label, eLanguage language); 

     public event dResourceResolver ResourceResolver; 

     public string ResourceKey { get; set; } 
     public object DataSource { get; set; } 

     private eLanguage _Language = eLanguage.ENUS; 
     public eLanguage Language 
     { 
      get { return _Language; } 
      set { _Language = value; } 
     } 

     protected override void OnLoad(EventArgs e) 
     { 
      base.OnLoad(e); 

      if (ResourceResolver != null) 
       Text = ResourceResolver.Invoke(ResourceKey, _Language); 
      else 
      { 
       if(rm != null) 
       { 
        Text = rm.GetString(ResourceKey); 
       } 
      } 
     } 

     public void LoadDataSource(string resource) 
     { 
      rm = new ResourceManager(resource, Assembly.GetExecutingAssembly()); 
     } 

     public void LoadDataSource(Type resource) 
     { 
      rm = new ResourceManager(resource); 
     } 
    } 
} 
+0

실제 컨트롤을 사용하는 코드를 작성해야합니다 =) – zincorp

+0

ascx 페이지와 코드가 외부 어셈블리에 있습니까? – jim

답변

70

네임 스페이스를 추가하는 코드이다, 나는 또한 조립이 필요합니다 발견했습니다.

<add tagPrefix="one" namespace="myApplication.Controls" assembly="myApplication"/> 

그리고, 단지 깨끗하고 재건하고 모든 작업을 수행해야합니다 어셈블리는 경우 myApplication의 Web.config에서이 작업을 수행. web.config 파일에서이 파일을 동일한 디렉토리의 컨트롤에서 사용하지 않으면 페이지에 파일을 추가 할 필요가 없습니다. 그런 다음 웹 양식의 맨 위에 참조가 필요합니다. 그러나 사용자 정의 컨트롤과 동일한 디렉터리에서 사용자 지정 서버 컨트롤을 사용하지 않는 것이 좋습니다.

+3

그건 정말 이상합니다. 즉 컨트롤이 앱 내에 있더라도 어셈블리가 필요하다는 것입니다. 도와 줘서 고마워. – Matt

+3

이 답변에 왜 투표가 많은지 알 수 있습니다. – ProfK

1

잘 이해하면 컨트롤이 같은 프로젝트 내에 있습니까?

은 다음과 페이지의 마크 업에 컨트롤을 등록하려고 : <uc:foo ID="foo1" runat="server"/>

<%@ Register Src="~/controls/foo.ascx" TagName="foo" TagPrefix="uc" %> 

당신은 마크 업에 컨트롤을 포함 할 수 있습니다. 이것이 작동하지 않으면 컨트롤이 컴파일되지 않습니다. 불필요한 내용을 주석으로 처리하고 다시 시도하십시오.

+3

내 페이지에서 사용하려고하는 웹 컨트롤이 아닙니다. 그것은 System.Web.UI.WebControls.Literal 클래스에서 상속받은 사용자 정의 컨트롤입니다. – Matt

0

내 ASP.NET Web Forms 응용 프로그램을 게시 할 때도이 문제가 발생했습니다. 게시하지 않고 서버의 IIS에 폴더를 복사하여 붙여 넣을 때도 사용자 지정 컨트롤/사용자 컨트롤을 사용하는 페이지의 비슷한 문제가 체계적으로 발생했습니다.

web.config의 컨트롤을 올바르게 등록했는데 내 컴퓨터에서 문제가 없었습니다. 나는 등록 과정이 괜찮다고 생각했다.

가 발행/복사하여 과거의 배포 과정에 대한 문제를 해결하려면, 당신은 각 페이지에있는 모든 사용자 컨트롤의 네임 스페이스와 어셈블리를 다시 등록해야합니다 (.ASPX)이 그들을 사용

<%@ Register TagPrefix="mycompany" Namespace="MyCompany.Web.Forms.Controls" Assembly="MyCompany.Web" %> 
<%@ Register TagPrefix="mycomapny" Namespace="MyCompany.Web.Forms.Controls.ValidatorComponents" Assembly="MyCompany.Web" %> 

하세요 사용자 지정 컨트롤이나 사용자 컨트롤에 대해서도 동일한 사고 방식이 적용됩니다. 이 문제는 VS 2012에서도 발생했지만 .NET 4.0에서도 발생합니다. 이 프로세스는 ASP.NET 스킨이 이러한 컨트롤을 참조 할 때도 필요합니다.

1

내 프로젝트의 일부인 사용자 정의 컨트롤에 대해 "알 수없는 서버 태그"오류가 발생했습니다. 외부 조립품이 없었습니다. @ citronas는 "이것이 작동하지 않으면 컨트롤이 컴파일되지 않을 수 있습니다."그리고 가장 큰 원인은 this troubleshooting post입니다.

내 제어 코드가 오류없이 컴파일되었지만 무시하고 있다는 경고가 나타났습니다. 내 경고는 누락 된 다른 파일을 참조하는 내 컨트롤 폴더. 일단 경고를 해결하면 컨트롤이 올바르게 컴파일되고 다음과 같이 web.config에만 등록 지시문과 수정 사항을 사용할 수 없습니다.

<%@ Register TagPrefix="myPrefix" TagName="myControl" Src="~/controls/mySourceFile.ascx" %> 

<myPrefix:myControl runat="server"></myPrefix:myControl> 
관련 문제