c# eval function

本文关键字:function eval | 更新日期: 2023-09-27 18:27:21

我在vb.net页面中有这段代码,它运行得很好。当我试图将html复制并粘贴到c#页面时,它不起作用,不知道为什么,有任何线索吗?

<asp:TemplateField HeaderText="Decal Expiration Date"                                                       SortExpression="ExpirationDate">
    <ItemTemplate>
        <%#DisplayExpirationDate(Eval("DecalID"))%>
    </ItemTemplate>
</asp:TemplateField>

asp:Template字段位于网格视图中。我在后面的代码中有函数DisplayExpirationDate。在aspx源代码页上,它在<%#DisplayExpirationDate(Eval("DecalID"))%>行下加了下划线,并告诉我最佳重载方法匹配有一些无效参数。它适用于VB页面,但不适用于c#页面。

如有任何帮助,请解释。

c# eval function

您必须将值强制转换为适当的数据类型,例如

<%#DisplayExpirationDate((string)Eval("DecalID"))%> 

否则,该方法必须接受object类型的对象。在VB.NET中,只要您在没有编译器选项strict的情况下进行编译,它就可以工作。

VB.NET有一个非常。。。errmm宽容名为Option Strict的隐式强制转换(以及其他,大多不相关,但同样令人烦恼)设置。这默认为Off,因此它将在运行时尝试将Eval(即System.Object)的返回转换为函数所需的任何类型。

C#采用了另一种方法,并让您指定强制转换。因此,您应该将其更改为:

<%#DisplayExpirationDate((string)Eval("DecalID"))%>

请注意,如果您需要一个字符串,您也可以执行:

<%#DisplayExpirationDate(Eval("DecalID").ToString())%>

但是,这并不完全相同——如果值是null(VB.NET中的Nothing),它将失败,但如果是DBNull,它将成功。以前的版本将执行相反的操作。我通常认为随意使用DBNullToString是草率的,所以我强烈建议使用第一种模式,并在必要时进行适当的DBNull检查。