2009-12-13 13 views
13

Ho solo una singola pagina "Default.aspx" e un controllo ListView singolo. Perché sto ricevendo questo errore. Mai verificato primaSpecificare un segnaposto di elemento impostando la proprietà ID di un controllo su "itemPlaceholder"

"Un oggetto segnaposto deve essere specificato su ListView 'ListView1' .Specificare un segnaposto di elemento impostando la proprietà ID di un controllo su" itemPlaceholder ". Il controllo segnaposto di articolo deve anche specificare runat =" server "."

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TesterConcepts._Default"%> 

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

    <html xmlns="http://www.w3.org/1999/xhtml" > 
    <head runat="server"> 
     <title></title> 
    </head> 
    <body> 
     <form id="form1" runat="server"> 
     <div> 

     </div> 
     <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
      onselecting="ObjectDataSource1_Selecting" SelectMethod="GetItemsCollection" 
      TypeName="TesterConcepts.CutomDataSource"> 
      <SelectParameters> 
       <asp:Parameter Name="items" Type="Object" /> 
      </SelectParameters> 
     </asp:ObjectDataSource> 
     <asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1" 
      onselectedindexchanged="ListView1_SelectedIndexChanged"> 
     </asp:ListView>  
    </body> 
    </html> 

fare questo non era disponibile, anche

<asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1" 
    OnSelectedIndexChanged="ListView1_SelectedIndexChanged" 
     ItemPlaceholderID="PlaceHolder1"> 
</asp:ListView> 
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 

Ora genera questa eccezione

"un segnaposto articolo deve essere specificato sul ListView 'ListView1'. Specificare un segnaposto oggetto impostando un controllo di La proprietà ID a "PlaceHolder1". Il controllo segnaposto dell'articolo deve specificare anche runat = "server" "

risposta

11

Sembra che sia necessario definire l'elemento segnatore structur e per gli elementi dell'articolo che la query restituirà.

Suggerirei di leggere questo articolo. Un po 'vecchio, ma illustra il concetto. http://www.4guysfromrolla.com/articles/122607-1.aspx

18

In ListView, Modello di layout è il modello che decide il layout del display dati. Dovrebbe avere un tag segnaposto di articolo con attributo runat = "server".

Dal momento che il LayoutTemplate e il ItemTemplate di ListView sono definiti separatamente, abbiamo bisogno di un modo per dire al LayoutTemplate, "Ehi, per ogni record che stai visualizzando, inserisci qui il markup dell'elemento di rendering." Ciò si ottiene aggiungendo un controllo sul lato server con il valore ID specificato dalla proprietà ItemPlaceholderID di ListView.

Ref - http://www.4guysfromrolla.com/articles/122607-1.aspx

Quindi hanno U'll a 1) Definire un ItemsTemplate 2) Aggiungere un segnaposto nel LayoutTemplate

<tr runat="server" id="itemPlaceholder"> 
        </tr> 

o

<ItemTemplate> 
       <tr> 
        <td> 
         <asp:Label ID="MessageLabel" runat="server" Text='<%# Eval("Item") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="URLLabel" runat="server" Text='<%# Eval("URL") %>' /> 
        </td> 
       </tr> 
     </ItemTemplate> 

Così il finale Il design sarà simile a

<asp:ListView ID="NoticeItemsListView" runat="server"> 
      <LayoutTemplate> 
       <table width="200px"> 
        <tr> 
         <th> 
          Message 
         </th> 
         <th> 
          URL 
         </th> 
        </tr> 
        <tr runat="server" id="itemPlaceholder"> 
        </tr> 
       </table> 
      </LayoutTemplate> 
      <ItemTemplate> 
       <tr> 
        <td> 
         <asp:Label ID="MessageLabel" runat="server" Text='<%# Eval("Item") %>' /> 
        </td> 
        <td> 
         <asp:Label ID="URLLabel" runat="server" Text='<%# Eval("URL") %>' /> 
        </td> 
       </tr> 
      </ItemTemplate> 
     </asp:ListView> 
11

All'interno del vostro ListView che hai per aggiungere un LayoutTemplate contenente il segnaposto:

<asp:ListView ID="listview1" runat="server" ItemPlaceholderID="PlaceHolder1" > 
     <LayoutTemplate> 
      <asp:PlaceHolder ID="PlaceHolder1" runat="server" /> 
     </LayoutTemplate> 
     <ItemTemplate> 
      ... 
     </ItemTemplate> 
    </asp:ListView>