2013-06-04 4 views
3

전체, 일반적으로 페이지의 코드 숨김 클래스 파일에 정의 된 페이지에서 변수를 출력하고 싶습니다. 변수를 public 또는 protect 표시로 설정할 수 있습니다. 첫 페이지에서 아래와 같이 사용할 수 있습니다. <%=VariableName%>.ListView에서 <%=...%>을 사용할 수없는 이유

하지만 왜 ListView에서 사용할 수 있는지 모르겠습니다. 내 코드를 검토하는 데 도움을주십시오. 첫 페이지 나 오류 페이지를 가지고

public partial class _Default : System.Web.UI.Page 
    { 
     protected int iListNumber = 0; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      List<SimpleCapModel> DataSourceList = TestDataHelper.GetMyIssuedList(); 
      listShower.DataSource = DataSourceList; 
      iListNumber = DataSourceList.Count(); 
      listShower.DataBind(); 
     } 
    } 

페이지의 코드 숨김에서

<div id="divIssuedListContainer" class="myIssuedList"> 
<asp:ListView id="listShower" runat="server"> 
    <LayoutTemplate> 
     <div id="divIssuedListHeadTitle"> 
      <div id="divIssuedListTitleIco"> 
       <img alt="" src="ico/IssuedCap.png" /> 
      </div> 
      <div id="divIssuedListTitleName"> 
       <span>ISSUED</span><span>TRADE NAMES</span><span>/LICENSES</span> 
      </div> 
      <div id="divIssuedListItemNumber"> 
       <span> 
        <%=iListNumber%></span> 
      </div> 
     </div> 
     <div style="clear:both"></div> 
     <div id="divIssuedListBody"> 
      <ul> 
       <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder> 
      </ul> 
     </div> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <li> 
      <table> 
       <tr> 
        <td> 
         <img alt="" src="" /> 
        </td> 
        <td> 
         <div> 
          <span> 
           <%# Eval("altID") %> 
           - 
           <%# Eval("englishTradeName") %></span></div> 
         <div> 
          <span>Expired Date:<%# Eval("expDate") %></span> 
         </div> 
        </td> 
       </tr> 
      </table> 
     </li> 
    </ItemTemplate> 
</asp:ListView> 

에서

는 말했다 :

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.HttpException: The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 

Source Error: 


Line 19:    listShower.DataSource = DataSourceList; 
Line 20:    iListNumber = DataSourceList.Count(); 
Line 21:    listShower.DataBind();//this line cause error. 
Line 22:   } 
Line 23:  } 

그리고 나는 경우를 표현식을 사용하십시오.. 오류는 사라졌지만 목록 번호 대신 빈 값이 표시됩니다. 아래의 렌더링 된 결과를 검토하십시오. html :

<div id="divIssuedListItemNumber"> 
<span> </span> 
</div> 

내가 놓친 것인지 몰랐습니까? 내가 그랬다면. 내가 알려주도록 도와 줘. 고마워.

답변

2

데이터 바인딩을 사용하고 있기 때문에 <%#iListNumber %>을 사용해야합니다. 그렇지 않으면 예외가 발생합니다 (인라인 표현식에 대한 자세한 내용은 http://support.microsoft.com/kb/976112 참조).

<%#iListNumber.ToString %>을 사용해 보시고 차이가 있는지 확인하십시오.

UPDATE는 :

문제는 인라인 표현은 데이터 바인딩은 [분명히] either handling the OnLayoutCreated event없이 작동하거나 ListView을 확장하지 않습니다 LayoutTemplate,에 있음을 것으로 보인다.

ListView 확장하는 방법의 예는 다음 중 하나를 참조하십시오

+0

+1 매우 유용한 게시물. 그러나'<% # iListNumber.ToString() %>'는 작동하지 않습니다. –

+0

* 작동하지 않습니다 * 어떻게? 아직도 당신에게 예외를 주는가? 당신에게 당신이 원하는 가치를주지 않습니까? –

+0

죄송합니다, 예외없이 목록의 번호를 표시하지 않습니다. 감사. –

0

, 그것은 기본적으로이 의미 : 당신이 할 수있는 데이터 바인딩 된 컨트롤에 .NET 태그를 임의로 throw합니다.

이 솔루션은 대신,이처럼 .NET 컨트롤이 임의의 텍스트를 발생하는 것입니다 <asp:Literal Runat="server" Text="<%# iListNumber %>" />

당신이 코드에서 .NET의 코드 블록을 넣을 때, 동적위한 제어 자리를 구축 할 수있다. 조금 까다 롭습니다. 그러나 컨트롤에서 모든 사용자 정의 태그를 래핑하면 해당 속성이 데이터 바인딩되고 데이터 바인딩 된 블록은 의미가있는 경우 "깨끗한"상태로 유지됩니다.

+0

안녕하세요, 아직도 이런 식으로 작동하지 않습니다. 감사. –

+0

는 0입니까? 목록의 각 항목에 대해 증가해야합니까? 그 가치에 대한 기대는 무엇입니까? –

+0

비어있는 것을 나타내며, 렌더링 html은 '

'입니다. 목록의 수 (내 경우 10) 또는 0으로 가정합니다. 감사합니다. –

관련 문제