5

有人可以尝试推荐最佳的行动理由来解决以下请求:

我已经创建了许多使用 Repeater 类作为基础的扩展类,并且喜欢这样做的灵活性、易用性和结果。我现在要做的是为单个对象(即未实现 IListSource 或 IEnumerable 的 DataSource)制作类似的自定义 Web 控件。我已经通过扩展转发器创建了我想要实现的结构,然后在设置数据源时使用 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,它使用反射(可用于实现特定接口的所有类),它将生成所需的表单,每次需要时只需要后面(上面)三行代码。

我是否应该将一个属性添加到一个自定义中继器(DataObject),该中继器接受一个对象并相应地设置 DataSource 并节省我的时间?或者,还有更好的方法?

希望这一切都有意义!

干杯,史蒂夫

4

1 回答 1

5

您正在努力解决转发器想要一个 List 并且您想给它 1 个实例的事实。只需将其包装在一个新的 List* oObj 中)然后继续。它一直都在做。

我当然不知道他们在使用自定义服务器控件时到底发生了什么。在我看来,你又太努力了。

<asp:repeater id="whatever" runat=server>
   <ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate>
</asp:repeater>
于 2009-05-03T12:20:26.227 回答