c#eval函数

时间:2012-03-09 20:35:41

标签: c# asp.net c#-4.0

我在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#页面。

任何帮助,解释赞赏。

2 个答案:

答案 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,因此它会在运行时尝试将EvalSystem.Object)的返回值转换为函数所需的任何类型。

C#采用另一种方法,并指定演员。所以,你应该把它改成:

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

请注意,如果需要字符串,您也可以这样做:

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

但是,这不完全相同 - 如果值为null(VB.NET中为Nothing),它将失败,但如果它是DBNull则成功。以前的版本将执行反向。我一般认为偶然使用DBNullToString作为邋,,所以我强烈鼓励第一种模式,并在必要时进行适当的DBNull检查。