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#页面。
如有任何帮助,请解释。
您必须将值强制转换为适当的数据类型,例如
<%#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
,它将成功。以前的版本将执行相反的操作。我通常认为随意使用DBNull
和ToString
是草率的,所以我强烈建议使用第一种模式,并在必要时进行适当的DBNull
检查。