我正在使用数据绑定来迭代从数据库返回的记录集,其中一个记录集是以逗号分隔的项目列表 - 我正在尝试使用第二个转发器将每个项目显示为超链接。到目前为止,这是我的代码:
<asp:Repeater ID="myRepeater" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "SomeList").ToString().Trim(',') %>'>
<ItemTemplate>
<a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'><%# Container.DataItem %></a>
</ItemTemplate>
</asp:Repeater>
问题在于,到目前为止,有三个原因可以解决这个问题:
server tag is not well formed
,否则会收到runat="server"
错误 - 为什么会这样? (为什么它没有runat="server"
?)Container.DataItem
评估System.Data.DataRowView
的实例 - 如何获取我分割的字符串的当前部分?Container.DataItem
,即使我知道字符串中有一个逗号我已经给出了 - 任何想法?答案 0 :(得分:1)
对于非平凡的场景,我通常将Container.DataItem转换为我想要的类型,而不是Eval(),然后以类型安全的方式从那里对其进行操作。
“格式不正确”错误是由Trim()参数周围的单引号引起的。如果在属性定义的外部使用单引号,则不能在其中使用它们。在像你这样的情况下,数据绑定定义中包含大量代码,我经常创建一个辅助方法(在脚本runat = server中用于MVC视图和其他内联代码友好的情况,或者在代码隐藏中用于传统方法)网络表单应用程序)处理我想要运行的代码。通过重构为一种方法,它澄清了HTML并避开了蹩脚的单/双引号限制。
无论您将代码放在何处,在您的情况下,您希望:
代码看起来像这样:
<asp:Repeater ID="myRepeater" runat="server"
DataSource='<%# ((System.Data.DataRowView)Container.DataItem)["SomeList"].ToString().Split(new string[] {","}, StringSplitOptions.RemoveEmptyEntries)%>'>
<ItemTemplate>
<a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'>
<%# Container.DataItem %>
</a>
</ItemTemplate>
</asp:Repeater>
答案 1 :(得分:1)
您是否为sqldatasource指定了updatecommand,deletecommand?
即使没有提供适当的参数,受影响的行也将始终为0.如果有两个参数用于update命令,则必须通过updatecommand提供两个参数。
有关详情,请查看以下网址:http://www.itpian.com/Coding/4774-Data-binding.aspx