Укажите заполнитель элемента, установив для свойства ID элемента управления значение “itemPlaceholder”.
-
19-09-2019 - |
Вопрос
У меня есть только одна страница "Default.aspx" и один элемент управления ListView.Почему я получаю эту ошибку.Никогда раньше не случалось
"В ListView должен быть указан заполнитель элемента 'ListView1'.Укажите заполнитель элемента, установив для свойства ID элемента управления значение "itemPlaceholder".Элемент управления заполнителем элемента также должен указывать 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>
делать это было бесполезно даже
<asp:ListView ID="ListView1" runat="server" DataSourceID="ObjectDataSource1"
OnSelectedIndexChanged="ListView1_SelectedIndexChanged"
ItemPlaceholderID="PlaceHolder1">
</asp:ListView>
<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
Теперь он выдает это исключение
"В ListView должен быть указан заполнитель элемента 'ListView1'.Укажите заполнитель элемента, установив для свойства ID элемента управления значение "PlaceHolder1".Элемент управления заполнителем элемента также должен указывать runat="server""
Решение
Похоже, вам нужно определить структуру элемента-заполнителя для элементов item, которые вернет запрос.
Я бы посоветовал прочитать эту статью.Немного устарел, но иллюстрирует концепцию.http://www.4guysfromrolla.com/articles/122607-1.aspx
Другие советы
В ListView шаблон макета - это шаблон, который определяет макет отображения данных .У него должен быть тег-заполнитель элемента с атрибутом runat=”server”.
Поскольку LayoutTemplate и ItemTemplate для ListView определены отдельно, нам нужен какой-то способ сообщить LayoutTemplate: "Эй, для каждой отображаемой записи поместите сюда разметку отображаемого элемента". Это достигается путем добавления серверного элемента управления со значением ID, указанным свойством ItemPlaceholderID в ListView.
Ссылка - http://www.4guysfromrolla.com/articles/122607-1.aspx
Следовательно, вам придется 1) Определить ItemsTemplate 2) Добавить заполнитель в LayoutTemplate
<tr runat="server" id="itemPlaceholder">
</tr>
или
<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 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>
Внутри вашего ListView вы должны добавить LayoutTemplate, содержащий заполнитель:
<asp:ListView ID="listview1" runat="server" ItemPlaceholderID="PlaceHolder1" >
<LayoutTemplate>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" />
</LayoutTemplate>
<ItemTemplate>
...
</ItemTemplate>
</asp:ListView>