ASP.NET中继器和DataBinder.Eval
我在我的网页中有一个<asp:Repeater>
,它绑定到编程创建的数据集。ASP.NET中继器和DataBinder.Eval
这个转发器的目的是从A-Z创建一个索引,当点击它时刷新页面上的信息。
的中继器具有像一个链接按钮,以便:
<asp:LinkButton ID="indexLetter" Text='<%#DataBinder.Eval(Container.DataItem,"letter")%>'
runat="server" CssClass='<%#DataBinder.Eval(Container.DataItem, "cssclass")%>'
Enabled='<%#DataBinder.Eval(Container.DataItem,"enabled")%>'></asp:LinkButton>
数据集创建方式如下:
protected DataSet getIndex(String index)
{
DataSet ds = new DataSet();
ds.Tables.Add("index");
ds.Tables["index"].Columns.Add("letter");
ds.Tables["index"].Columns.Add("cssclass");
ds.Tables["index"].Columns.Add("enabled");
char alphaStart = Char.Parse("A");
char alphaEnd = Char.Parse("Z");
for (char i = alphaStart; i <= alphaEnd; i++)
{
String cssclass="", enabled="true";
if (index == i.ToString())
{
cssclass = "selected";
enabled = "false";
}
ds.Tables["index"].Rows.Add(new Object[3] {i.ToString(),cssclass,enabled });
}
return ds;
}
然而,当我运行该页面中,“指定的转换无效异常“引发Text='<%#DataBinder.Eval(Container.DataItem,"letter")'
。我不知道为什么,我已经尝试手动将字符串转换为(String),我尝试了一个ToString()方法,我试过了所有的东西。
此外,如果在调试器中为DataBinder.Eval(Container.DataItem,“letter”)添加一个监视,则它返回的值为“A”,根据我的说法,该文本属性应该没问题。
编辑:
这里是例外:
System.InvalidCastException了未处理由用户代码
消息= “指定的转换无效”。来源= “App_Web_cmu9mtyc”
堆栈跟踪: 在ASP.savecondition_aspx .__ DataBinding__control7(对象发件人,EventArgs e)在E:\的Documents and Settings \费尔南多\我 文档\ Visual Studio的 2008 \项目\ mediTrack \ mediTrack \ saveCondition。 ASPX:线45 在System.Web.UI.Control.OnDataBinding(EventArgs的) 在System.Web.UI.Control.DataBind(布尔raiseOnDataBinding) 在System.Web.UI.Control.DataBind() 在系统.Web.UI.Control.DataBindChildren()InnerException:
任何意见将不胜感激,谢谢编号2: 固定!问题不在Text或CSS标签中,但在Enabled标签中,我必须将其转换为布尔值。问题是,这个例外是在文本标签信号,我不知道为什么
我不知道这是否会令任何区别,但尝试以下(注间距太)
<asp:LinkButton ID="indexLetter" Text='<%# Eval("letter")%>'
runat="server" CssClass='<%# Eval("cssclass")%>'
Enabled='<%# Eval("enabled")%>'></asp:LinkButton>
它也没有工作......我真的不知道发生了什么事! – Fernando 2009-11-04 19:12:21
从你给出的例子中,你不需要数据集,只需要数据表。你也没有指定列的数据类型。
DataTable indexTable = new DataTable();
indexTable.Columns.Add("letter", typeof(string));
//do stuff
_repeater.DataSource = indexTable;
_repeater.DataBind();
和评估这样的
Text='<%# Eval("letter")%>'
不幸的是,它仍然发生,如果我这样做(将数据类型添加到列,并只使用dataTable) 我编辑帖子以离开异常跟踪 – Fernando 2009-11-04 19:10:36
不破坏运动,但是这有什么错硬编码:
<a href="Page.aspx?LIndex=A">A</a>
<a href="Page.aspx?LIndex=B">B</a>
<a href="Page.aspx?LIndex=C">C</a>
...
<a href="Page.aspx?LIndex=Z">Z</a>
Noooo!那太糟了。一个简单的 loop)会让这个过程简单得多。 – James 2012-01-08 11:52:13
它看起来像问题是与Enabled值 - 它需要是布尔值。
这工作:
<asp:LinkButton ID="indexLetter" Text='<%# this.FooData()%>'
runat="server" CssClass='<%#DataBinder.Eval(Container.DataItem, "cssclass")%>'
Enabled='<%#Convert.ToBoolean(DataBinder.Eval(Container.DataItem,"enabled"))%>'></asp:LinkButton>
你一定的例外是“信”,而不是“启用”的一部分? – 2009-11-04 19:14:46
你是对的zarembisty!就是这样,我从来没有尝试从启用的属性中移除Eval ......谢谢! – Fernando 2009-11-04 19:47:58
我希望MS永远不会绑定到页面中。如果你只能通过代码隐藏来避免这些问题,那会更好。 – Phill 2011-07-25 00:18:55