【问题标题】:How to use Eval() with a column name that contains a dot(.)?如何将 Eval() 与包含点 (.) 的列名一起使用?
【发布时间】:2011-11-26 08:06:47
【问题描述】:

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

DataBinding:“System.Data.DataRowView”不包含名为“slno”的属性。

如何解决?我无法更改数据库中的列名:我正在从 stored procedure 获取数据,所以我无法修改它。

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

【问题讨论】:

  • 只是一个猜测。你试过用[]括号括起来吗?
  • 大约 5 分钟前有一个完全相同的问题...
  • @SaQiB:是的,我尝试过Eval(["slno."])Eval("[slno.]"),但它们都不起作用。

标签: c# asp.net sql-server data-binding


【解决方案1】:

使用

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

交替使用

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

有关 MSDN 参考,请参阅 http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx

编辑 - 另一个选项:

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

编辑 2 - 根据 cmets:

AFAIK Eval 将字符串作为表达式处理,并使用一些规则对其进行评估 - 这些规则对点有特殊处理...

GetPropertyValue OTOH 不应用这些规则(这意味着它不能完全替代Eval AFAIK),因此能够处理Eval 的点处理导致问题的情况(例如在这种情况下)。

【讨论】:

  • 那么请显示返回此列的存储过程的确切声明...
  • 现在我尝试使用简单的select * from tbPRecord,但仍然出现错误。
  • 请看我上面的编辑...并且:如果这不起作用,请显示返回列的确切声明...
  • 现在很受欢迎请解释为什么&lt;%# DataBinder.GetPropertyValue(Container.DataItem, "slno.") %&gt; 有效而其他人无效?
  • 因为Eval 将字符串作为表达式处理,它使用一些规则(对点有特殊处理)进行评估,而GetPropertyValue 不应用这些规则(这意味着它不是完​​全替换对于EvalAFAIK)...
【解决方案2】:

我使用 DataBinder.GetPropertyValue() 如下:

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

并且在 ASP.NET VB 项目中表现出色。

【讨论】:

    【解决方案3】:

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

    SELECT Tabl1.slno. AS slno_no_dot from Table1
    

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

    【讨论】:

      【解决方案4】:

      我最近在自己编写的自定义控件中遇到了同样的问题。在某些情况下,我需要使用语法“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);
      }         
      
                 
                          
      

      【讨论】:

        【解决方案5】:

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

        改为使用DataBinder.GetPropertyValue()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-02
          • 1970-01-01
          • 2017-02-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多