2010-05-06 4 views
2

ASP.NET에서이 li 항목 서버 요소 (runat="server")를하지 않고 조건부 를 렌더링하는 우아한 방법이 있나요 다음과 같은 마크 업조건부 렌더링

<li class="blabla"> 
     <asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" /> 
    </li> 

가 있습니까? Render() 무시는 옵션이 아닙니다.

p.s. 이것은 목록의 바닥 글 콘텐츠이지만 Repeater 나 ListView에서 FooterTemplate 표시 여부를 제어 할 수있는 방법은 없습니다.

답변

3

는 동적으로 리피터의 ItemDataBound 이벤트의 사용을 만들 수있는, 리피터의 FooterTemplate 영역의 가시성을 변경하려면 처음부터 렌더링을 중단합니다.

세 번째로 asp:placeholder 컨트롤은 자체 HTML을 렌더링하지 않으므로 Nikos Steiakakis의 답변에서 asp:Panel 대신 사용할 수 있습니다.

+1

에 대한 편집 된 대답을 확인하십시오. 어떻게이 기능을 놓칠 수 있습니까? 고맙습니다!! – UserControl

3

Panel (또는 div) 컨테이너와 함께 접근 방법을 사용하여 그에 따라 컨테이너를 숨기거나 표시 할 수 있습니다.

<asp:Panel ID="panelContainer" runat="server" Visible='<%= ShowButton %>'> 
<li class="blabla"> 
     <asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" /> 
</li> 
</asp:Panel> 

여기서 표시 버튼의 버튼을 나타내는 여부중인 상태에 따라 참 또는 거짓의 값을 취한다 서버 측 코드를 보호/공용 부울 변수이다.

다른 방법으로 ShowButton 변수를 'visible'또는 'hidden'값을 취하여 그에 맞게 설정하고 li의 가시성을이 방식으로 설정하는 것입니다. 나는.

<li class="blabla" style='visibility: <%= ShowButton %';"> 
     <asp:LinkButton ID="myBtn" runat="server" OnCommand="myBtn_Command" /> 
</li> 
+0

이것은 li 항목에 서버 요소와 html 컨테이너를 추가하는 것과 같습니다 (Panel은 항상 div에 렌더링됩니다.) – UserControl

+0

@frogbot 예, 패널이 div에 렌더링되고 'ShowButton'은 문자열이어야하고 '숨김'또는 '표시'값을 가져야하며 거의 동일한 작업을 수행해야한다는 점에서 주요 차이점이있는 div를 사용하여 작업 할 수 있습니다. 다른 한편으로, 당신은 li의 visiblitiy를 동일한 방식으로 설정하는 것을 할 수 있습니다. 내 대답에서 편집 해 줄게. –

0

가장 좋은 옵션은 runat = "server"를 추가하여 서버 측 컨트롤을 제안하고 만들 때 가장 간단한 옵션입니다. 이것이 바로 runat = "server"입니다.

의견에 비추어, 자리 표시 자 컨트롤을 사용하고 서버 측 코드에서 선택적으로 listitem 및 button을 출력 할 수 있습니다.

protected void rptTest_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Footer) 
     { 
      e.Item.Visible = false; 
     } 
    } 
또 다른 옵션은 동적/숨기기 콘텐츠를 표시하는 몇 가지 자바 스크립트를 렌더링 할 수 있습니다

하지만,이 같으면 :

+0

출력 마크 업에서 ViewState의 크기가 커지거나 자동 생성 된 ID를 원하지 않습니다. – UserControl

+0

이렇게하면 ViewState에 별다른 차이가 없습니다. 정말. 그것을 시도하고 볼 수 있습니다. 마크 업에 자동 생성 된 ID를 원하지 않으면 ClientID를 제어 할 수있는 ASP.NET 4로 업그레이드하거나 옵션이 아닌 경우 완전히 깨끗하고 ViewState가없는 MVC를 사용하십시오. –

+0

그렇지 않으면 다른 옵션 –