2013-06-04 4 views
3

Все, в общем случае. Если мы хотим вывести переменную на странице, которая определена в файле класса кода на странице. Мы могли бы установить переменную с видимостью public или protect. и на первой странице мы можем использовать его, как показано ниже. <%=VariableName%>.Почему нельзя использовать <%=...%> в ListView

Но я не знаю, почему он не может использовать его в ListView. Пожалуйста, помогите просмотреть мой код.

В первой странице

<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> 

В отделенного кода страницы

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

Я получил страницу ошибки сказал:

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:  } 

И если я используйте выражение <%#iListNumber%>. Ошибка исчезла, но я получил пустое значение вместо номера списка. пожалуйста, просмотрите приведенный ниже результат html:

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

Я не знал, пропустил ли я что-нибудь? Если бы я сделал. Пожалуйста, помогите мне сообщить об этом.

ответ

2

Вам необходимо использовать <%#iListNumber %>, потому что вы используете привязку данных ListView, иначе вы получите исключение (см.: http://support.microsoft.com/kb/976112 для получения дополнительных сведений о встроенных выражениях).

Попробуйте использовать <%#iListNumber.ToString %> и посмотрите, если это имеет значение.

UPDATE:

Проблема, кажется, что ваш рядный выражение в LayoutTemplate, где связывания данных [по-видимому] не будет работать без either handling the OnLayoutCreated event или продлевая ListView.

См одно из следующих примеров того, как продлить ListView:

+0

+1 очень полезно сообщение. Но '<% # iListNumber.ToString()%>' не работает. –

+0

* не работает * как? Все еще давая вам исключение? Не дать вам то значение, которое вы хотите? –

+0

Извините, без каких-либо исключений, не показывать номер списка. Благодарю. –

0

Учитывая ошибки вы получаете, это в основном означает: вы можете 'просто произвольно бросать теги .NET в элементах управления данными.

Решение является, вместо этого, выбросьте случайный текст в элементе управления .NET, как это: <asp:Literal Runat="server" Text="<%# iListNumber %>" />

Когда вы помещаете .NET кодоблок в коде, он динамически должен построить контрольную метку-заполнитель для него. Это немного сложно. Но если вы обернете все свои пользовательские теги в элементе управления, тогда только одно свойство получит привязку данных, а блок данных будет «чистым», если это имеет смысл.

+0

Привет, Все еще не работает таким образом. Благодарю. –

+0

показывает 0? Должен ли он увеличиваться для каждого элемента в списке? Какое ожидание этой ценности? –

+0

Он показывает пустой, рендер html равен '

'. он должен быть номером списка (в моем случае 10) или 0. спасибо. –

Смежные вопросы