我认为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
返回的值的转换(从String
到Eval("JobTitle")
)?
b)如果Eval
没有进行转换,那么采用什么方法呢?
感谢名单
编辑:
我假设在我们的示例中,在Asp.Net评估(并将其转换为字符串)之前调用GetSelectedJobTitle()包含在&lt;%#%&gt;中的表达式?
答案 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")) %>
编译!