ASP.NET 서버 컨트롤이 임베디드 코드 블록을 속성 값으로 사용하게하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com/questions/387167

문제

제목의 속성이있는 사용자 정의 서버 컨트롤이 있습니다. 컨트롤을 사용할 때는 ASPX 페이지에서 제목 값을 다음과 같이 설정하고 싶습니다.

<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>

그러나이 작업을 수행하면 정확한 문자열 <%= PagePropertyValue%>가보고 싶은 속성 값이 아닌 표시됩니다.

따라서 데이터 바인딩 표현식을 시도한 후 (아래 제안 된대로). 나는 나쁘게 보이는 문자열 문자를 얻지 못하지만 다른 것도 얻지 못합니다.

<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>

이런 종류의 가치를 취하기 위해 사용자 정의 컨트롤에 무엇을해야합니까? 아니면 페이지에해야 할 일이 있습니까?

도움이 되었습니까?

해결책

당신은 할 수 없습니다. < %= %>는 문자열을 응답 스트림에 직접 씁니다. 서버 컨트롤이 구성된 후에 발생합니다. 보다 이 게시물 설명을 위해.

따라서 Zachary에서 알 수 있듯이 CodeBehind 또는 <%# + 데이터 바인딩 중 하나입니다.

다른 팁

내 자신의 질문에 대한 후속 조치로서, 내가 원했던 것은 <%$ $ $ 구문을 사용하여 ASP.NET 표현식을 사용하는 것임을 발견했습니다.

이것은 서버 제어 측면에서 추가 처리가없는 것으로 분명히 수행 할 수 있습니다.

<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>

이것은 잘 작동합니다.

Databinding Syntax를 사용해보십시오.<%# PagePropertyValue %>

제안 된대로 바인드 속성 값이 올바르게 작동하려면 ASPX 또는 ASCX 파일에이를 수행합니다.

<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>

그러면 실제로 페이지에서 데이터를 바인딩해야합니다.

protected void Page_Load(object sender, EventArgs e)
{
    DataBind();
}

이렇게하면 ASCX 또는 ASPX 파일의 데이터를 바인딩합니다.

이것은 제어 속성에만 해당됩니다. <%= 구문 외부 제어 속성을 사용하는 경우 페이지의 다른 곳을 의미하는 구문은 예상대로 작동합니다. 따라서 <%= getCapitalUserName ()%>는 올바른 메소드를 호출하고 페이지에서 호출 결과를 주입합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top