2009-06-01 10 views
7

Weźmy następujący przykład kodu: (ASP.NET WebForms)Strong wpisywanych kontenerowy w 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> 

Teraz to, co chcę zrobić, to unikać casting treści o DataItem, tj. Ta linia:

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

czuję inspirowane z ASP.NET MVC, i zastanawiałem się, czy mogę stworzyć silną wpisane, widok, i zdefiniować go lubię:

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

lub jakikolwiek inny sposób na uniknięcie typowania i generalnie mają silny widok typowy dla formularzy Web ASP.NET.

Jakieś dobre pomysły?

Odpowiedz

0

Myślę, że możesz dziedziczyć po kontroli Repeater i uczynić ją generyczną (np. Repeater). Ale musisz również przepisać/dziedziczyć klasę RepeaterItem.
Jako przykład można podać artykuł this lub this.

9

.NET 4.5 posiada ładne rozwiązanie tego problemu. Po prostu ustawiasz typ danych, którego chcesz użyć na samym wzmacniaczu.

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

Patrz: