Especificar un marcador de posición tema estableciendo la propiedad ID de un control a “itemPlaceholder”

StackOverflow https://stackoverflow.com/questions/1897581

Pregunta

Sólo tengo una sola página "Default.aspx" y un solo control ListView. ¿Por qué recibo este error. Nunca antes había sucedido

"Un marcador de posición artículo debe ser especificado en ListView 'ListView1'. Especificar un marcador de posición tema estableciendo la propiedad ID de un control a 'itemPlaceholder'. El control de elemento de marcador de posición debe especificar también 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>

Hacer esto no era útil, incluso

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

Ahora se lanza esta excepción

"Un marcador de posición artículo debe ser especificado en ListView 'ListView1'. Especificar un marcador de posición tema estableciendo la propiedad ID de un control a 'PLACEHOLDER1'. El control de elemento de marcador de posición también debe especificar runat =" server ""

¿Fue útil?

Solución

Parece que es necesario definir la estructura del elemento marcador de posición para los elementos item que devolverá la consulta.

Me gustaría sugerir la lectura de este artículo. Un poco viejo, pero ilustra el concepto. http://www.4guysfromrolla.com/articles/122607-1.aspx

Otros consejos

En ListView, diseño de plantillas es la plantilla que decide el diseño de la pantalla de datos. Se debe tener una etiqueta de elemento marcador de posición con el atributo runat =”server”.

Desde LayoutTemplate del ListView y ItemTemplate se definen cada uno por separado, necesitamos alguna manera de contar la LayoutTemplate, "Hey, para cada registro que está visualizando, poner el marcado artículo traducido aquí". Esto se logra mediante la adición de un control del lado del servidor con el valor de ID especificado por la propiedad ItemPlaceholderID del ListView.

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

Por lo tanto ua tener que 1) Definir una ItemsTemplate 2) Añadir un marcador de posición en el 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>

Así que el diseño final se verá así

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

Dentro de su ListView súmale un LayoutTemplate que contiene el marcador de posición:

   <asp:ListView ID="listview1" runat="server" ItemPlaceholderID="PlaceHolder1" >
        <LayoutTemplate>
            <asp:PlaceHolder ID="PlaceHolder1" runat="server" />
        </LayoutTemplate>
        <ItemTemplate>
            ...
        </ItemTemplate>
    </asp:ListView>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top