Как вызвать методы расширения с помощью Eval в элементе управления с привязкой к данным
У меня есть простой метод расширения типа int, поэтому я могу сделать следующее:
string timeLength = 61.ToTime() // timeLength will be "1:01"
Это прекрасно работает в коде, но я хочу использовать этот метод расширения в шаблоне повторителя. При привязке данных я хочу сделать следующее:
<%# Eval("LengthInSeconds").ToTime() %>
Это не сработало, поэтому я попытался:
<%# ((int) Eval("LengthInSeconds")).ToTime() %>
и это все еще не сработало. JIT-компилятор не видит мой метод расширения, и у меня есть правильный оператор импорта на странице.
Моя единственная идея для решения этой проблемы состоит в том, чтобы заменить Eval на элемент управления Literal и вызвать метод расширения в коде, но в любом случае, я все равно хотел бы знать, почему это не работает.
Спасибо
5 ответов
Похоже, я могу ответить на свой вопрос! Asp.Net компилировал шаблоны.aspx,.ascx, используя компилятор.Net 2.0. Мне нужно было добавить следующее в мой web.config, чтобы он работал
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4">
<providerOption name="CompilerVersion" value="v3.5"/>
<providerOption name="WarnAsError" value="false"/>
</compiler>
</compilers>
</system.codedom>
Я все еще должен выполнить приведение к (int) в Eval, но это по крайней мере имеет для меня смысл.
У меня была такая же проблема, и в итоге я нашел решение.
В моем случае я забыл импортировать пространство имен моего класса Extensionmethod. Несмотря на то, что код позади страницы включает пространство имен, aspx-page нет.
Я просто добавил пространство имен в файл web.config:
<pages styleSheetTheme="Default">
<namespaces>
<add namespace="MyNameSpace"/>
</namespaces>
и вуаля!
Другое решение, которое решило это для меня (аналогично Патрику), это просто импортировать пространство имен на этом конкретном элементе управления или странице aspx.
<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %>
Это решение было более подходящим для моей проблемы, так как методы расширения были только для класса, используемого в одном элементе управления.
Объявление пространства имен выполняется под элементом pages в файле web.config следующим образом:
<pages styleSheetTheme="Default">
<namespaces>
<add namespace="MyNamespace"/>
</namespaces>