programing

ASP.NET 사용자 지정 컨트롤 - 알 수 없는 서버 태그

batch 2023. 9. 3. 12:25
반응형

ASP.NET 사용자 지정 컨트롤 - 알 수 없는 서버 태그

리터럴 컨트롤에서 상속되는 사용자 지정 컨트롤을 만들었습니다.페이지에서 컨트롤을 사용하려고 하면 구문 분석 오류가 발생합니다.웹.config에 추가했습니다.

<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 );
        }
    }
}

네임스페이스를 추가할 때 어셈블리도 필요합니다.만약 당신의 어셈블리도myApplicationweb.config에서 이 작업을 수행합니다.

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

그런 다음, 청소하고 다시 만들면 모든 것이 작동할 것입니다.웹.config에 있는 경우 동일한 디렉토리의 컨트롤에서 사용하지 않는 한 페이지에 추가할 필요가 없습니다. 그러면 웹 양식의 맨 위에 참조가 필요합니다.그러나 사용자 컨트롤과 동일한 디렉토리에서 사용자 정의 서버 컨트롤을 사용하지 않는 것이 좋습니다.

프로젝트에 포함된 사용자 컨트롤에 대해 "알 수 없는 서버 태그" 오류가 발생했습니다.외부 어셈블리가 없습니다.@citronas는 "이 방법이 작동하지 않으면 컨트롤이 컴파일할 수 없습니다."라고 언급했으며, 이 문제 해결 게시물에도 가장 가능성이 높은 원인으로 나열되어 있습니다.

제 컨트롤 코드는 오류 없이 컴파일되고 있었지만, 제가 무시하고 있던 경고가 있었습니다.제가 경고한 것은 컨트롤 폴더에 있는 리소스 파일에서 누락된 다른 파일을 참조하는 것이었습니다.일단 경고를 처리하면 컨트롤이 올바르게 컴파일되어 다음과 같이 register 명령만으로 컨트롤을 사용할 수 있으며 web.config에 대한 수정 사항은 없습니다.

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

<myPrefix:myControl runat="server"></myPrefix:myControl>

제가 당신을 올바르게 이해했다면, 당신의 통제권은 같은 프로젝트 안에 있습니까?

다음을 사용하여 페이지 마크업에 컨트롤을 등록합니다.

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

와 함께<uc:foo ID="foo1" runat="server"/>컨트롤을 마크업에 포함할 수 있습니다.이것이 작동하지 않으면 컨트롤이 컴파일할 수 없습니다.불필요한 것들을 댓글로 달아서 다시 해보세요.

ASP를 발행할 때도 이런 문제가 있었습니다.NET 웹 양식 응용 프로그램입니다.폴더를 등록하지 않고 서버의 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 스킨은 이러한 컨트롤을 참조합니다.

저의 경우 응용 프로그램이 로컬 모드에서 실행되고 있을 때, 게시할 때 사용자 제어 태그에서 동일한 오류가 발생했습니다.

사용자 제어 태그에 주석을 달았을 때, 다른 장소에서 경로 오류를 발견했습니다.다른 문제를 수정하고 사용자 제어 태그의 주석을 제거하면 작동했습니다.표시된 오류는 관련이 없는 것 같습니다.

언급URL : https://stackoverflow.com/questions/2009138/asp-net-custom-control-unknown-server-tag

반응형