You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET含特殊字符与空格列数据绑定异常问题求助

解决ASP.NET绑定含特殊字符与空格列名的异常问题

问题根源

你遇到的TargetInvocationException内部关联的ArgumentException,本质是DataBinder.Eval解析列名时,把列名里的括号、空格和非ASCII特殊字符当成了表达式语法的一部分,无法正确识别为DataColumn。

解决方法

方法1:在存储过程中给列设置别名(推荐)

从数据源层面简化列名,彻底避免前端处理复杂特殊字符的麻烦。修改你的存储过程,给目标列起一个简洁的别名:

CREATE PROCEDURE PodaciZaFormuArtikl
AS
BEGIN
    SELECT
        [ID artikl]
      ,[Naziv]
      ,[Jedinična cijena (bez PDV-a)] AS UnitPriceWithoutVAT  -- 设置简洁别名
      ,[Jmj]
      ,[Opis]
      ,[ID skladišna lokacija]
    FROM Artikl
END

之后在ASPX页面中直接使用别名绑定:

<tr>
    <td class="first-column">Jedinična cijena (bez PDV-a):</td>
    <td><%# DataBinder.Eval(Container.DataItem, "UnitPriceWithoutVAT") %></td>
</tr>

这个方法最可靠,后续维护也更省心,不会再因为列名特殊字符引发问题。

方法2:直接通过DataRowView索引访问

如果不想修改存储过程,可以直接将Container.DataItem转换为DataRowView,通过列名字符串索引直接取值,绕过DataBinder.Eval的表达式解析逻辑:

<tr>
    <td class="first-column">Jedinična cijena (bez PDV-a):</td>
    <td><%# ((DataRowView)Container.DataItem)["Jedinična cijena (bez PDV-a)"] %></td>
</tr>

方法3:修正DataBinder.Eval的表达式写法

如果坚持使用DataBinder.Eval,需要用转义引号包裹列名,确保解析器将整个字符串识别为完整列名:

<tr>
    <td class="first-column">Jedinična cijena (bez PDV-a):</td>
    <td><%# DataBinder.Eval(Container.DataItem, "\"Jedinična cijena (bez PDV-a)\"") %></td>
</tr>

内容的提问来源于stack exchange,提问作者meraki_1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 17:32:36