什么时候从Eval()返回的值确切地转换为字符串?

时间:2009-12-01 19:39:54

标签: asp.net data-binding gridview

我认为Eval("JobTitle")会将返回值转换为String类型,但似乎并非如此,因为值(由Eval("JobTitle")返回)传递给GetSelectedJobTitle()Object类型而不是String,这导致错误说“无法从对象转换为字符串”。

<EditItemTemplate>
    <asp:DropDownList ID="EditJob" runat="server" 
           SelectedIndex='<%# GetSelectedJobTitle(Eval("JobTitle")) %>'
           DataSource=’<%# Titles %>’>    
    </asp:DropDownList>
</EditItemTemplate>


public int GetSelectedJobTitle(string title)
{
    ...
}

public string[] Titles
{
    ...
}

a)那么,何时会发生从Object返回的值的转换(从StringEval("JobTitle"))?

b)如果Eval没有进行转换,那么采用什么方法呢?

感谢名单


编辑:


我假设在我们的示例中,在Asp.Net评估(并将其转换为字符串)之前调用GetSelectedJobTitle()包含在&lt;%#%&gt;中的表达式?

1 个答案:

答案 0 :(得分:3)

Eval返回“对象”。如果你知道你会得到一个字符串,你必须将它强制转换为字符串。

<EditItemTemplate>
    <asp:DropDownList ID="EditJob" runat="server" 
           SelectedIndex='<%# GetSelectedJobTitle((string)Eval("JobTitle")) %>'
           DataSource=’<%# Titles %>’>    
    </asp:DropDownList>
</EditItemTemplate>

转换发生在DataBind事件中。

编辑:更好地回答这里的评论。

我们的最大区别是声明:

你的:

<%# GetSelectedJobTitle(Eval("JobTitle")) %>

还给了我一个

  

错误2参数'1':无法从'object'转换为'string'p:\ WebSite1 \ Default.aspx 19

我是:

<%# GetSelectedJobTitle((string)Eval("JobTitle")) %>

编译!