Как вызвать методы расширения с использованием Eval в режиме управления данными
У меня есть простой метод расширения для типа int, поэтому я могу сделать следующее:
string timeLength = 61.ToTime() // timeLength will be "1:01"
Это отлично работает в коде, но я хочу использовать этот метод расширения в шаблоне Repeater. При привязке данных я хочу сделать следующее:
<%# Eval("LengthInSeconds").ToTime() %>
Это не сработало, поэтому я попробовал:
<%# ((int) Eval("LengthInSeconds")).ToTime() %>
и он все еще не работает. Компилятор JIT не видит мой метод расширения, и у меня есть правильная инструкция импорта на странице.
Моя единственная идея для решения этой проблемы - заменить Eval на Literal control и вызвать метод расширения в коде, но в любом случае мне все равно хотелось бы знать, почему это не работает.
Спасибо
Ответы
Ответ 1
Похоже, я отвечаю на свой вопрос! 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, но это, по крайней мере, имеет смысл для меня.
Ответ 2
У меня была такая же проблема, и в итоге я нашел решение.
В моем случае я забыл импортировать пространство имен моего класса Extensionmethod. Несмотря на то, что код за страницей включал пространство имен, aspx-страница не делала этого.
Я просто добавил пространство имен в файле web.config:
<pages styleSheetTheme="Default">
<namespaces>
<add namespace="MyNameSpace"/>
</namespaces>
и вуаля!!
Ответ 3
Другое решение, которое разрешило его для меня (что похоже на Patrik's), заключается в том, чтобы просто импортировать пространство имен на эту конкретную страницу управления или aspx.
<%@ Import Namespace="My.Namespace.Containing.MyExtensions.Class" %>
Это решение было более подходящим для моей проблемы, поскольку методы расширения были только для класса, используемого в одном элементе управления.
Ответ 4
Работает ли Eval ( "LengthInSeconds" )?
Ответ 5
Объявление пространства имен выполняется под элементом pages в файле web.config следующим образом:
<pages styleSheetTheme="Default">
<namespaces>
<add namespace="MyNamespace"/>
</namespaces>