Контейнер со строгой типизацией в WebForms - PullRequest
7 голосов
/ 02 июня 2009

Взять следующий пример кода: (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 ]

9 голосов
/ 25 апреля 2013

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

См:

2 голосов
/ 12 апреля 2012

Это может быть немного поздно, но это кажется хорошим решением:

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

0 голосов
/ 02 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...