2009-12-13 22 views
13

Tôi chỉ có một trang "Default.aspx" và một điều khiển ListView duy nhất. Tại sao tôi nhận được lỗi này. Không bao giờ xảy ra trướcChỉ định trình giữ chỗ mục bằng cách đặt thuộc tính ID của điều khiển thành "itemPlaceholder"

"Trình giữ chỗ mục phải được chỉ định trên ListView 'ListView1'. Chỉ định trình giữ chỗ mục bằng cách đặt thuộc tính ID của điều khiển thành" itemPlaceholder ". Điều khiển trình giữ chỗ mục cũng phải chỉ định 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> 

làm điều này là không hữu ích thậm chí

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

Bây giờ nó ném ngoại lệ này

"Một placeholder mục phải được xác định trên ListView 'ListView1'. Chỉ định một placeholder mục bằng cách thiết lập một sự kiểm soát của Thuộc tính ID cho "PlaceHolder1". Điều khiển trình giữ chỗ mục cũng phải chỉ định runat = "server" "

Trả lời

11

Có vẻ như bạn cần xác định phần tử trình giữ chỗ structur e cho các phần tử mục mà truy vấn sẽ trả về.

Tôi khuyên bạn nên đọc bài viết này. Một chút cũ, nhưng minh họa khái niệm. http://www.4guysfromrolla.com/articles/122607-1.aspx

18

Trong ListView, Mẫu bố cục là mẫu quyết định Bố cục hiển thị dữ liệu. Thẻ phải có thẻ giữ chỗ mục với thuộc tính runat = "server".

Vì LayoutTemplate và ItemTemplate của ListView được xác định riêng biệt, chúng tôi cần một số cách để nói với LayoutTemplate, "Này, đối với mỗi bản ghi bạn đang hiển thị, hãy đánh dấu mục được hiển thị tại đây." Điều này được thực hiện bằng cách thêm một điều khiển phía máy chủ với giá trị ID được chỉ định bởi thuộc tính ItemPlaceholderID của ListView.

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

Do đó U'll phải 1) Xác định một ItemsTemplate 2) Thêm một Placeholder trong LayoutTemplate

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

hoặc

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

Vì vậy, trận chung kết Thiết kế trông giống như

<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

Bên trong danh sách của bạnXem bạn đã thêm một LayoutTemplate chứa PlaceHolder:

<asp:ListView ID="listview1" runat="server" ItemPlaceholderID="PlaceHolder1" > 
     <LayoutTemplate> 
      <asp:PlaceHolder ID="PlaceHolder1" runat="server" /> 
     </LayoutTemplate> 
     <ItemTemplate> 
      ... 
     </ItemTemplate> 
    </asp:ListView> 
Các vấn đề liên quan