programing

Framework 3.5에서 서버 태그가 <%= %>인 Visible 속성 설정

javamemo 2023. 6. 24. 08:43
반응형

Framework 3.5에서 서버 태그가 <%= %>인 Visible 속성 설정

저는 다음과 같은 runat="server" 컨트롤의 가시성을 설정하기 위해 <%=filename%>와 같은 서버 태그를 사용하여 .NET Framework 4 프로젝트에서 작업해 왔습니다.

  <div id="MyId" runat="server" visible="<%=MyVisiblePropertyOnCodeBehind %>" >
    Content
  </div>

이것은 프레임워크 4에서 작동하지만, 이제 프레임워크 3.5 프로젝트에서 사용하려고 하면 작동하지 않는 것 같습니다.이것은 Framework 4 전용 기능입니까?코드 뒤에서 가시성을 설정하는 것 외에 가장 시원한(및 .aspx 측면) 대안이 있습니까?추한 것을 사용합니다.

    MiId.Visible = MyVisiblePropertyOnCodeBehind

[편집] 솔루션:

저의 문제와 해결책을 이해할 수 있게 해주는 당신의 의견에 감사드립니다!

그것은 한 가지 이상의 내 잘못이었습니다.

VS2010 프로젝트에서는 <%=이(가) 아닌 <%#을(를) 사용했습니다.

또한 VS2010 프로젝트에서는 "Page"에서 상속된 페이지가 아니라 CustomPage 클래스에서 상속된 페이지를 사용하고 있다는 사실을 몰랐습니다. CustomPage 클래스에서 자동으로 바인딩이 생성되어 Framework 4.0 전용 기능인 것 같습니다.

여기서 말씀하신 것처럼 다음과 같은 마크업이 있는 경우:

  <div id="MyId" runat="server" visible="<%# MyVisiblePropertyOnCodeBehind %>" >
    Content
  </div>

코드 뒤에 다음을 추가하여 작동할 수 있습니다.

    public bool  MyVisiblePropertyOnCodeBehind = true;
    protected void Page_Load(object sender, EventArgs e) {
        DataBind();
        // Or if you want only for one control, MyId.DataBind();             
    }

제가 읽은 바로는, 이 DataBind()는 애플리케이션의 성능을 저하시킬 수 있습니다.얼마인지 아십니까?이것이 큰 프로젝트에 사용되는 "전문적인" 기술로 이해될 수 있습니까, 아니면 피해야 한다고 생각하십니까?

저는 마크업을 단일 뷰에서 읽기 쉽고 이해하기 쉽게 만드는 방식을 좋아하지만, 느린 코드에 대해 죄책감을 느끼고 싶지는 않습니다. 왜냐하면 그것 때문입니다.

게시한 코드는 ASP.NET 2.0 또는 ASP.NET 4.0 런타임의 서버 태그에 대해 올바른 구문이 아닙니다.두 버전 중 하나에서 다음을 사용하여 표시 속성 설정<%= ... %>서버 태그에서 파서 오류가 발생해야 합니다.

파서 오류 메시지:'System' 유형의 개체를 만들 수 없습니다.'Visible' 속성에 대한 문자열 표현 '<%=MyVisiblePropertyOnCodeBehind%>'의 'Boolean'입니다.

설정하는 것 외에 두 가지 옵션이 있습니다.Visible뒤에 있는 코드의 속성 또는<script runat="server">태그. 첫 번째는 데이터 바인딩을 사용하는 것입니다.Visible소유물.당신은 전화를 해야 할 것입니다.DataBind()둘 중 하나에 대한 방법MyId또는 바인딩할 값에 대한 상위 컨트롤 중 하나입니다.

<div id="MyId" runat="server" visible="<%# MyVisiblePropertyOnCodeBehind %>" >
    Content
</div>

다른 옵션은 다음과 같이 코드를 작성하는 것입니다.

<% if(MyVisiblePropertyOnCodeBehind) { %>
<div id="MyId" runat="server">
    Content
</div>
<% } %>

이 방법의 단점은 코드 블록이 포함된 컨트롤이나 페이지에 컨트롤을 프로그래밍 방식으로 추가할 수 없다는 것입니다.시도하면 다음과 같은 오류가 표시됩니다.

컨트롤에 코드 블록(예: <%... %>)이 포함되어 있기 때문에 컨트롤 컬렉션을 수정할 수 없습니다.

그렇긴 하지만, 저는 단지 지금 당신이 하고 있는 방식으로 부동산을 설정하는 것이 최선의 방법이라고 생각합니다.

ASP.NET aspx 페이지의 인라인 표현식에 대해서입니다.% > 는할 수 , 컨트롤의 속성(<% % > 와 에될 수 .<asp:Button... Text =<% %> ..> 2에서 사용자 표현을 할 수 ASP.NET 2.0은 사용자 정의 표현입니다.

BTW, aspx 인라인 tempalte에서 서버 제어 속성에 값을 제공하는 또 다른 방법은 <%# %> 데이터 바인딩 식을 사용하는 것입니다.이 기능은 기본 제공됩니다.다른 인라인 식과 다른 점은 대상 컨트롤 또는 컨테이너 컨트롤의 메서드입니다.

스티븐 쳉

Microsoft MSDN 온라인 지원 리드

전체 게시물: http://www.aspnet-answers.com/microsoft/ASP-NET/29389067/dynamically-set-a-control-property.aspx

해결 방법은 다음과 같습니다. ASP.net 인라인 표현 문제

여기 당신의 원래 질문에서 코드의 단순성을 유지하는 다른 접근법이 있습니다.여기서 div 태그에서 runat="server"를 제거하고 "Visible" 속성 대신 css "display:display"를 사용해야 합니다.이 접근 방식의 단점은 태그가 보이지 않고 클라이언트 측에서 가시성이 처리되더라도 태그가 브라우저로 계속 전송된다는 것입니다.

<div style='<%=MyVisiblePropertyOnCodeBehind ? "" : "display: none" %>' >
    Content
</div>

다음과 같은 로드 이벤트에서 변수를 true/false로 설정하기만 하면 됩니다.

private bool IsEditMode {get; set;}      

protected bool IsVisible 
{
    get { retun IsEditMode ;}
    set { IsEditMode =value;}
}  

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        // based on some condition set this to true or false 
        isEditMode=true;
    }
}   

그런 다음 asx 페이지 내의 제어 속성에서 다음과 같은 속성을 통해 가시성을 설정합니다.

Visible="<%# !IsEditMode %>" 

또 다른 접근 방식은 컨트롤에 ID를 부여하고 코드에 가시성을 설정하는 것입니다.

protected void Page_Load(object sender, EventArgs e){
   MyId.Visible = MyVisiblePropertyOnCodeBehind;
} 

<div id="MyId" runat="server">Content</div>

언급URL : https://stackoverflow.com/questions/9595851/set-visible-property-with-server-tag-in-framework-3-5

반응형