我在vb.net页面中有这个代码,它工作得很好。当我尝试将html复制并粘贴到c#页面时,它不起作用,不知道为什么,任何线索?
<asp:TemplateField HeaderText="Decal Expiration Date" SortExpression="ExpirationDate">
<ItemTemplate>
<%#DisplayExpirationDate(Eval("DecalID"))%>
</ItemTemplate>
</asp:TemplateField>
asp:Template字段位于gridview中。我在后面的代码中有函数DisplayExpirationDate
。在aspx源页面上,它强调了行<%#DisplayExpirationDate(Eval("DecalID"))%>
,并告诉我最好的重载方法匹配有一些无效的参数。它适用于VB页面,但不适用于c#页面。
任何帮助,解释赞赏。
答案 0 :(得分:4)
您必须将您的值转换为适当的数据类型,例如
<%#DisplayExpirationDate((string)Eval("DecalID"))%>
该方法必须接受object类型的对象。在VB.NET中,只要您编译时没有编译器选项strict。
答案 1 :(得分:1)
VB.NET有一个......错误的...... 原谅 implicit cast (and other, mostly unrelated, but just as vexing) setting named Option Strict
。这默认为Off,因此它会在运行时尝试将Eval
(System.Object
)的返回值转换为函数所需的任何类型。
C#采用另一种方法,并指定演员。所以,你应该把它改成:
<%#DisplayExpirationDate((string)Eval("DecalID"))%>
请注意,如果需要字符串,您也可以这样做:
<%#DisplayExpirationDate(Eval("DecalID").ToString())%>
但是,这不完全相同 - 如果值为null
(VB.NET中为Nothing
),它将失败,但如果它是DBNull
则成功。以前的版本将执行反向。我一般认为偶然使用DBNull
和ToString
作为邋,,所以我强烈鼓励第一种模式,并在必要时进行适当的DBNull
检查。