2009-06-01 12 views
7

は、次のコードの例を見てみましょう:(ASP.NET Webフォーム)強い型付けされたコンテナ

<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のコンテンツキャストを避けるためです。このライン:

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

またはその他:

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

私はASP.NET MVCのインスピレーションを得た、と私は強く型付けされ、ビューを作成し、同じように定義することができれば思っていた感じています型キャスティングを避けるためには、一般的に、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> 

参照:

関連する問題