2009-06-01 20 views
7

Prendete seguente esempio di codice: (ASP.NET WebForms)Forte contenitore digitato in WebForms

<asp:Content ContentPlaceHolderID="Contents" runat="server"> 
    <div class="blogpost-list"> 
     <asp:Repeater ID="blogList" runat="server"> 
      <ItemTemplate> 
       <h2 class="blogpost-title"> 
        <%# (Container.DataItem as BlogPost).Title %> 
       </h2> 
       <p class="blogpost-meta"> 
       </p> 
       <p class="blogpost-content"> 
        <%# (Container.DataItem as BlogPost).ParsedContent %> 
       </p> 
      </ItemTemplate> 
     </asp:Repeater> 
    </div> 
</asp:Content> 

Ora quello che voglio fare, è quello di evitare la fusione contenuto del DataItem, vale a dire. questa linea:

<%# (Container.DataItem as BlogPost).Title %> 

mi sento ispirato del ASP.NET MVC, e si chiedeva se potevo creare un tipizzato forte, vista, e definirlo come:

<%@ Page 
    Language="C#" MasterPageFile="~/Blog.Master" 
    AutoEventWireup="true" CodeBehind="Default.aspx.cs" 
    Inherits="MyBlog.Default<MyStrongViewType>" 
%> 

O qualsiasi altra modo per evitare typecasting e, in generale, avere una forte visualizzazione tipizzata per Web Form di ASP.NET.

Qualche buona idea?

risposta

0

Penso che si possa ereditare dal controllo del ripetitore e renderlo generico (ad esempio ripetitore). Ma dovrai anche riscrivere/ereditare la classe RepeaterItem.
È possibile utilizzare l'articolo this o this come esempio.

9

.NET 4.5 ha una soluzione elegante per questo. Basta impostare il tipo di dati che si desidera utilizzare sul ripetitore stesso.

<asp:Repeater ID="blogList" runat="server" ItemType="BlogPost"> 
     <ItemTemplate> 
      <h2 class="blogpost-title"> 
       <%# Item.Title %> 
      </h2> 
      <p class="blogpost-meta"> 
      </p> 
      <p class="blogpost-content"> 
       <%# Item.ParsedContent %> 
      </p> 
     </ItemTemplate> 
    </asp:Repeater> 

See: