我有一个静态方法,它接受一个参数并返回一个类。该类有一个ReadOnlyCollection属性,我想在asp:repeater中显示。有没有办法使用LinqDataSource或ObjectDataSource?我与ObjectDataSource非常接近,但由于该方法返回单个类对象,我无法让我转发器绑定到属性..这就是我所做的:
ClassName:ClassName StaticMethod:StaticMethod(ParamName) ReadOnlyCollection:ClassName.Collection
<asp:objectdatasource
runat="server"
id="myData"
selectmethod="StaticMethod"
typename="ClassName"
>
<selectparameters>
<asp:parameter name="ParamName" defaultvalue="Value" />
</selectparameters>
</asp:objectdatasource>
<asp:repeater runat="server" datasourceid="myData">
<itemtemplate>
<%# Container.DataItem %>
</itemtemplate>
</asp:repeater>
所以,这只返回readonly集合对象,而不是我想要的每个项目。 这是否可能没有实际代码来实例化对象?
答案 0 :(得分:0)
如果您只关心在集合中显示数据,您可以添加另一个静态方法,该方法返回您的对象ReadOnlyCollection并绑定到该对象。或者,您可以抛弃ObjectDataSource并在代码中执行此操作,例如:
var myObj = ClassName.StaticMethod(someParam);
MyRepeater.DataSource = myObj.Collection;
MyRepeater.DataBind();
如果您需要在类和集合中显示这两个数据,那么您可以将另一个Repeater添加到ItemTemplate:
<asp:objectdatasource runat="server" id="myData"
selectmethod="StaticMethod" typename="ClassName">
<selectparameters>
<asp:parameter name="ParamName" defaultvalue="Value" />
</selectparameters>
</asp:objectdatasource>
<asp:Repeater runat="server" datasourceid="myData" OnItemDataBound="Rep_ItemDataBound">
<ItemTemplate>
<%# Eval("SomeProperty") %>
<ul>
<asp:Repeater id="RepCollection" runat="server">
<ItemTemplate>
<li><%# Eval("SomeCollectionProperty") %></li>
</ItemTemplate>
</asp:Repeater>
</ul>
</ItemTemplate>
</asp:Repeater>
ItemDataBound方法看起来像:
protected void Rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item)
{
var dataItem = (ClassName)e.Item.DataItem;
var innerRepeater = (Repeater)e.Item.FindControl("RepCollection");
innerRepeater.DataSource = dataItem.Collection;
innerRepeater.DataBind();
}
}