WebForms中的强类型容器

时间:2009-06-01 23:05:41

标签: asp.net webforms

以下代码示例:(ASP.NET 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的强类型视图。

有什么好主意吗?

3 个答案:

答案 0 :(得分: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>

请参阅:

答案 1 :(得分:2)

这可能有点晚了,但这似乎是一个很好的解决方案:

http://dotnetminute.blogspot.com/2012/04/creating-strongly-typed-repeater.html

答案 2 :(得分:0)

我认为您可以继承Repeater控件并使其成为通用控件(例如Repeater)。但是你也需要重写/继承RepeaterItem类 您可以使用thisthis文章作为示例。