2012-04-29 32 views
2

我想将所有定义的路由输出到页面上,而没有任何代码,所以我需要将RouteTable.Routes绑定到标记中的Repeater。我该怎么做 - <asp:Repeater>只有DataSourceID价值可用标记,而不是数据源。 我假设我需要为RouteTable.Routes声明一个DataSource,然后将其ID提供给Repeater,但我该怎么做?如何在aspx标记中将IEnumerable绑定到Repeater?

同样,我需要一个没有任何代码隐藏的解决方案,只有声明。

我使用asp.net 4.0(不MVC)

+0

你已经标记了objectdatasource ...所以我假设你找到了答案...查找msdn。应该给你一些指示灯 – deostroll 2012-05-05 04:46:25

+0

我还没有,我为此暂时添加了代码。 – Andrey 2012-05-05 19:45:05

回答

5

的asp.net Repeater控件确实有一个DataSource属性,你可以在ASPX标记设置(见下面的屏幕截图):

Screen shot of Repeater markup intellisense

典型地,所要做的就是将源属性设置为一个数据绑定表达式,它获取求值时的Page.DataBind()方法被调用。

<asp:Repeater ID="foo" DataSource = '<%# GetRoutes() %>' runat=server ></asp:Repeater> 

我想你仍然需要在页面上一些代码来调用的Page.DataBind()启动aspx页面上的数据绑定。

protected void Page_Load(object sender, EventArgs e) 
    { 
     Page.DataBind(); 
    } 

这个代码可以放在代码隐藏或者,因为你不希望使用代码隐藏在一个服务器代码块的aspx页面。但我相信它必须通过页面事件处理程序中的C#代码进行调用。我不相信这可以用纯粹的声明方式来完成。

1

你需要做一些最小的管道工作来完成这项工作。这里是一个gridview的示例。你也可以使用中继器的技术。

数据源对象类:

public class MyObjectDataSourceEntity 
{ 
    [DataObjectMethod(DataObjectMethodType.Select)] 
    public DataTable GetSomeRecords() 
    { 
     DataTable names = new DataTable(); 
     DataColumn FirstName = names.Columns.Add(); 
     FirstName.DataType = typeof(string); 
     FirstName.ColumnName = "FirstName"; 
     DataColumn LastName = names.Columns.Add(); 
     LastName.DataType = typeof(string); 
     LastName.ColumnName = "LastName"; 

     DataRow row = names.NewRow(); 
     row[0] = "Arun"; 
     row[1] = "Jayapal"; 
     names.Rows.Add(row); 
     row = names.NewRow(); 
     row[0] = "Namith"; 
     row[1] = "Chandran"; 
     names.Rows.Add(row); 
     return names; 
    } 

您需要包括System.ComponentModel命名空间。

标记:

<asp:GridView ID="GridView1" runat="server" AllowSorting="True" 
     DataSourceID="ObjectDataSource1"> 
    </asp:GridView> 
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" 
     SelectMethod="GetSomeRecords" 
     TypeName="ObjectDataSourceDemo.MyObjectDataSourceEntity"> 
    </asp:ObjectDataSource> 

注:我这里补充一个数据表,因为在GridView才明白该对象,当谈到排序权外的即装即用。所以你不必编写额外的代码。否则,您使用任何IEnumerable对象。但是你必须编写自己的排序逻辑。与中继器无关,但我想我会提到这一点。

现在你不需要在任何东西上拨打DataBind()! PS:一旦你为你的实体编写代码,首先建立你的项目。之后,您可以依靠您的设计师将ObjectDataSource控件添加到页面上。该向导会自动检测项目中的可支持对象,但您需要先构建解决方案。

相关问题