我想将所有已定义的路由输出到页面上而不需要任何代码,因此我需要将RouteTable.Routes
绑定到标记中的Repeater。我该怎么做 - <asp:Repeater>
在标记中只有DataSourceID
值,而不是DataSource。
我假设我需要为RouteTable.Routes
声明一个DataSource,然后将它的ID提供给Repeater,但我该怎么做?
同样,我需要一个没有任何代码隐藏的解决方案,只需要声明。
我使用的是asp.net 4.0(不是MVC)
答案 0 :(得分:5)
asp.net Repeater控件确实有一个DataSource属性,您可以在aspx标记中设置它(参见下面的屏幕截图):
通常,所做的是将DataSource属性设置为数据绑定表达式,该表达式在调用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 :(得分:1)
你需要做一些最小的管道来使这项工作。这是gridview的示例。您也可以为转发器调整技术。
DataSource对象类:
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
控件添加到页面上。该向导会自动检测项目中的可支持对象,但您需要先构建解决方案。