.Net Repeater эквивалент для одного объекта? - PullRequest
5 голосов
/ 03 мая 2009

Может ли кто-нибудь попытаться порекомендовать наилучшее основание для решения запроса ниже:

Я создал несколько расширенных классов, используя класс Repeater в качестве базы, и мне нравится гибкость, легкость и результаты этого. Теперь я хочу создать аналогичный пользовательский веб-элемент управления для одного объекта (т. Е. Источника данных, не реализующего IListSource или IEnumerable). Я создал структуру того, чего я пытаюсь достичь, расширяя ретранслятор, а затем при настройке источника данных, используя список из 1 элемента для хранения объекта, а затем привязку данных.

e.g a rough example:

    Dim oObj as New MyObject(1)
    Dim gl As New Generic.List(of MyObiect)()
    gl.Add(oObj)
    rpt.DataSource = gl
    rpt.DataBind()

Это похоже на небольшой взлом вокруг вещей, что я хотел бы сделать, это следующее:

e.g new call, where my control is the new custom control:

    Dim oObj as New MyObject(1)
    myControl.DataSource = oObj 
    myControl.DataBind()

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

<My:ObjControl ID="frm" runat="server">
    <Tabs>
        <My:Tab name="Details">
            <Items>
                <My:Item Type="Text" Label="First Name" Property="FirstName" />
                <My:Item Type="Text" Label="Last Name" Property="LastName" />
                <My:Item Type="Text" Label="Title" Property="Title" />
            </Items>
        </Tab>
        <My:Tab name="Address">
            <Items>
                <My:Item Type="Text" Label="Address 1" Property="Address1" />
                <My:Item Type="Text" Label="Address 2" Property="Address2" />
                <My:Item Type="Text" Label="Address 3" Property="Address3" />
            </Items>
        </Tab>
    </Tabs>
</My:ObjControl>

Эта реализация должна осуществляться с использованием WebForms, хотя, похоже, использование MVC было бы идеальным подходом, учитывая вышесказанное. Делая это, я хочу создать гибкий WebControl, который использует отражение (которое можно использовать для всех классов, которые реализуют определенный интерфейс), который будет генерировать требуемую форму только с тремя строками кода (сверху) каждый раз, когда это необходимо. 1012 *

Должен ли я просто добавить свойство в настраиваемый повторитель (DataObject), который принимает объект и соответствующим образом устанавливает источник данных и экономит мое время? Или есть лучший способ?

Надеюсь, все это имеет смысл!

Ура, Стив

Ответы [ 3 ]

5 голосов
/ 03 мая 2009

Вы очень стараетесь обойти тот факт, что ретранслятор хочет получить список, а вы хотите дать ему 1 экземпляр. Просто оберните его в новый список * oObj) и двигайтесь дальше. Это делается все время.

Я, конечно, не знаю, что, черт возьми, происходит с этим пользовательским элементом управления сервером. Мне кажется, ты снова стараешься.

<asp:repeater id="whatever" runat=server>
   <ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate>
</asp:repeater>
2 голосов
/ 11 июня 2010

Я полностью понимаю вашу точку зрения, stibstibstib. Я также хотел бы, чтобы ASP.NET Framework шел с серверным элементом управления, управляемым шаблоном, таким как ListView, но для одного объекта данных. Кажется ненужным, и кажется немного хакишным, создавать список из одного элемента просто для того, чтобы он работал с Repeater и ListView. Я понимаю, что это работает. Я понимаю, что это простое решение. Но ASP.NET - это фреймворк, и это выглядит как упущение, которое следует исправить. Эта статья http://gadgetopia.com/post/5343 затрагивает ту же концепцию, что существует два основных способа просмотра контента на веб-сайте: как отдельный элемент и как элемент в списке. Все еще удивлен, что ASP.NET не имеет ничего общего с серверным элементом управления ItemView

1 голос
/ 20 января 2012

В определенных ситуациях вы можете использовать DetailsView .

...