Когда именно значение, возвращаемое из Eval (), преобразуется в строку? - PullRequest
1 голос
/ 01 декабря 2009

Я думал, 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 не выполняет преобразование, какой метод делает?

1018 * спасибо *


EDIT:


Я предполагаю, что в нашем примере GetSelectedJobTitle () вызывается до того, как Asp.Net оценивает (и преобразует его в строку) выражение, содержащееся в <% #%>?

1 Ответ

3 голосов
/ 01 декабря 2009

Eval возвращает «объект». Вы должны привести его к строке, если знаете, что получите строку.

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

Преобразование происходит во время события DataBind.

РЕДАКТИРОВАТЬ: лучше ответить на комментарии здесь.

Наша большая разница в том, что утверждение:

Ваш:

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

дает мне также

Ошибка 2 Аргумент «1»: невозможно преобразовать из «объекта» в «строку» p: \ WebSite1 \ Default.aspx 19

Шахта:

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

Составляет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...