如何对包含点(.)的列名使用Eval()

本文关键字:Eval 包含点 | 更新日期: 2023-09-27 18:09:44

在我的SQL Server表中有一个列slno.(是的,它包含一个点),在SQL Server中工作良好。然而,<%#Eval("slno.")%>给出了一个错误:

数据绑定:"System.Data。DataRowView'不包含名为'slno'的属性。

如何解决这个问题?我不能改变数据库中的列名:我从stored procedure获得数据,所以我不能修改它。

<ItemTemplate> <%#Eval("slno.") %> </ItemTemplate>

如何对包含点(.)的列名使用Eval()

use

<%# ((DataRowView)Container.DataItem)["slno."] %>
使用

或者

<%# DataBinder.Eval (Container.DataItem, "slno.") %>

MSDN参考参见http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

EDIT -另一个选项:

<%# DataBinder.GetPropertyValue(Container.DataItem, "slno.") %>

编辑2 -按注释:

AFAIK Eval处理字符串作为表达式,它使用一些规则进行计算-这些规则对点有特殊处理…

GetPropertyValue OTOH不适用这些规则(这意味着它不是Eval AFAIK的完全替代),因此有能力处理Eval的点处理导致问题的情况(就像在这种情况下)。

我使用的DataBinder.GetPropertyValue()如下:

DataBinder.GetPropertyValue(Container.DataItem, "Name of my Fields with(Parentheses)") 

和工作像一个魅力的ASP。. NET VB项目。

您可以在SELECT SQL语句中使用SELECT AS。

SELECT Tabl1.slno. AS slno_no_dot from Table1

<ItemTemplate> <%#Eval("slno_no_dot") %> </ItemTemplate>

我最近在自己编写的自定义控件中遇到了同样的问题。在某些情况下,我需要使用语法"object.property"有时我需要使用"columnname.with.dots"最后,我通过使用Try-Catch块解决了这个问题:

object value;
try
{
    // Try "Object.Property" approach...
    value = DataBinder.Eval(container.DataItem, Fieldname);
}
catch
{    
    // fallback for columns containing dots or other special characters
    value = DataBinder.GetPropertyValue(container.DataItem, Fieldname);
}         
           
                    

不要使用DataBinder.eval();eval()无法读取点(.)后的字段。

使用DataBinder.GetPropertyValue()