функция c # eval - PullRequest
       3

функция c # eval

2 голосов
/ 10 марта 2012

У меня есть этот код на странице vb.net, и он работает просто отлично. Когда я попытался скопировать и вставить html на страницу c #, это не сработало, не знаю почему, какая-либо подсказка?

<asp:TemplateField HeaderText="Decal Expiration Date"                                                       SortExpression="ExpirationDate">
    <ItemTemplate>
        <%#DisplayExpirationDate(Eval("DecalID"))%>
    </ItemTemplate>
</asp:TemplateField>

поле asp: Template находится в виде сетки. У меня есть функция DisplayExpirationDate в коде позади. На исходной странице aspx он подчеркивает строку <%#DisplayExpirationDate(Eval("DecalID"))%> и говорит мне, что в наилучшем перегруженном методе совпадения есть недопустимые аргументы Это работает на странице VB, но не на странице c #.

Любая помощь, объяснение приветствуется.

Ответы [ 2 ]

4 голосов
/ 10 марта 2012

Вы должны привести свое значение к соответствующему типу данных, например,

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

В противном случае метод должен принимать объект типа object.В VB.NET это работает до тех пор, пока вы компилируете без строгой опции компилятора.

1 голос
/ 10 марта 2012

VB.NET имеет очень ... errmm ... прощение неявное приведение (и другие, в основном несвязанные, но просто неприятные) настройки с именем Option Strict. По умолчанию это Off, поэтому он попытается - во время выполнения - преобразовать возвращаемое значение Eval (то есть System.Object) в тот тип, который требуется вашей функции.

C # использует другой подход и заставляет вас указать приведение. Итак, вы должны изменить его на:

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

Обратите внимание, что если вам требуется строка, вы также можете сделать:

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

, но это не совсем то же самое - он потерпит неудачу, если значение равно null (Nothing в VB.NET), но завершится успешно, если оно DBNull. Предыдущая версия будет напротив . Обычно я считаю случайное использование DBNull и ToString небрежным, поэтому настоятельно рекомендую первый шаблон и соответствующую проверку DBNull, если это оправдано.

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