有人可以尝试推荐解决以下请求的最佳原因:
我使用Repeater类作为Base创建了许多扩展类,并且喜欢这样做的灵活性,简易性和结果。我现在要做的是为单个对象制作类似的自定义Web控件(即DataSource没有实现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,它使用反射(可以用于实现特定接口的所有类),它将生成所需的表单,每次只需要三行代码(上图)。< / p>
我是否应该将属性添加到自定义转发器(DataObject)中,该转发器接收对象并相应地设置DataSource并节省我的时间?或者有更好的方法吗?
希望这一切都有意义!
干杯, 史蒂夫
答案 0 :(得分:5)
你正在努力解决转发器想要一个List并且你想给它一个实例的事实。只需将其包装在新的List * oObj中,然后继续。它一直都在做。
我当然不知道他们在使用该自定义服务器控件时遇到了什么。在我看来,你再次努力了。
<asp:repeater id="whatever" runat=server>
<ItemTemplate>First Name: <%# DataBinder.Eval(Container.DataItem,"FirstName") %></ItemTemplate>
</asp:repeater>
答案 1 :(得分:2)
我完全理解你的观点,stibstibstib。我还希望ASP.NET Framework附带一个模板驱动的服务器控件,如ListView,但是对于单个数据对象。为了让它与Repeater和ListView一起工作,从单个项目创建一个列表似乎是不必要的,并且感觉有点哈希。我知道它有效。我知道这是一个简单的解决方案。但ASP.NET是一个框架,它似乎只是一个应该修复的遗漏。本文http://gadgetopia.com/post/5343涉及相同的概念,即在网站上查看内容有两种基本方式:作为单个项目,以及作为列表中的项目。仍然感到惊讶ASP.NET没有像ItemView服务器控件那样的东西
答案 2 :(得分:1)
在某些情况下,您可以使用DetailsView。