У меня есть простой метод расширения для типа int, поэтому я могу делать следующее:
string timeLength = 61.ToTime() // timeLength will be "1:01"
Это отлично работает в коде, но я хочу использовать этот метод расширения в шаблоне повторителя. При привязке данных я хочу сделать следующее:
<%# Eval("LengthInSeconds").ToTime() %>
Это не сработало, поэтому я попробовал:
<%# ((int) Eval("LengthInSeconds")).ToTime() %>
и это все еще не сработало. Компилятор JIT не видит мой метод расширения, и у меня есть правильный оператор импорта на странице.
Моя единственная идея для решения этой проблемы - заменить Eval элементом управления Literal и вызвать метод расширения в коде программной части, но в любом случае я все равно хотел бы знать, почему это не работает.
Спасибо





Eval ("LengthInSeconds") работает сам по себе?
Похоже, я сам отвечу на свой вопрос! 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 не включала.
Я просто добавил пространство имен в файл web.config:
<pages styleSheetTheme = "Default">
<namespaces>
<add namespace = "MyNameSpace"/>
</namespaces>
и вуаля !!
ссылка на документацию msdn.microsoft.com/en-us/library/ms164642.aspx и пример: <pages theme = "Default"> <namespaces> <add namespace = "MyExample.Example.Web" /> </namespaces> <controls> </controls> </pages>
Объявление пространства имен выполняется под элементом страниц в файле web.config следующим образом:
<pages styleSheetTheme = "Default">
<namespaces>
<add namespace = "MyNamespace"/>
</namespaces>
Другое решение, которое решило эту проблему для меня (которое похоже на решение Патрика), - просто импортировать пространство имен на этом конкретном элементе управления или странице aspx.
<%@ Import Namespace = "My.Namespace.Containing.MyExtensions.Class" %>
Это решение было более подходящим для моей проблемы, поскольку методы расширения были только для класса, используемого в одном элементе управления.
Да, это только что вернуло int в строковой форме.