2009-06-01 1 views
7

Возьмем следующий пример кода: (ASP.NET WebForms)Strong типизированных контейнеров в 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> 

Теперь то, что я хочу сделать, это, чтобы избежать отливку содержание DataItem, то есть. эта линия:

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

Я чувствую вдохновило на ASP.NET MVC, и было интересно, если я мог бы создать сильную напечатанный, вид, и определить это нравится:

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

или любой другой способ избежать приведения типов и, в общем, иметь строго типизированное представление для ASP.NET WebForms.

Любые хорошие идеи?

ответ

0

Я думаю, что вы можете наследовать от контроля ретранслятора и сделать его общим (например, ретранслятор). Но вам также потребуется переписать/наследовать класс RepeaterItem.
В качестве примера можно привести this или this.

9

.NET 4.5 имеет отличный решение для этого. Вы просто задаете тип данных, который хотите использовать на самом повторителе.

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

См:

Смежные вопросы