2009-06-01 6 views
7

Prenez exemple de code suivant: (ASP.NET WebForms)Container typé Forte 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> 

Maintenant ce que je veux faire, est d'éviter la coulée de contenu du DataItem, à savoir. cette ligne:

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

Je me sens inspiré du ASP.NET MVC, et je me demandais si je pouvais créer une forte typée, vue et définir comme:

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

Ou tout autre façon d'éviter le typage et, en général, avoir une vue typée forte pour ASP.NET WebForms.

Des bonnes idées?

Répondre

0

Je pense que vous pouvez hériter du contrôle Repeater et le rendre générique (par exemple, répéteur). Mais vous devrez également réécrire/hériter de la classe RepeaterItem.
Vous pouvez utiliser l'article this ou this comme exemple.

9

4,5 .NET a une solution astucieuse pour cela. Vous venez de définir le type de données que vous souhaitez utiliser sur le répéteur lui-même.

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

Voir: