Подтвердить что ты не робот

Как вызвать методы расширения с использованием Eval в режиме управления данными

У меня есть простой метод расширения для типа int, поэтому я могу сделать следующее:

string timeLength = 61.ToTime() // timeLength will be "1:01"

Это отлично работает в коде, но я хочу использовать этот метод расширения в шаблоне Repeater. При привязке данных я хочу сделать следующее:

<%# Eval("LengthInSeconds").ToTime() %>

Это не сработало, поэтому я попробовал:

<%# ((int) Eval("LengthInSeconds")).ToTime() %>

и он все еще не работает. Компилятор JIT не видит мой метод расширения, и у меня есть правильная инструкция импорта на странице.

Моя единственная идея для решения этой проблемы - заменить Eval на Literal control и вызвать метод расширения в коде, но в любом случае мне все равно хотелось бы знать, почему это не работает.

Спасибо

4b9b3361

Ответ 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>