Засада с asp.net mvc
От: seregaa Ниоткуда http://blogtani.ru
Дата: 11.04.10 07:05
Оценка:
Напоролся на засаду при указании inherits для страницы. Не получается указать базовый класс — генерик.

Использую синтаксис inherits="System.Web.Mvc.ViewPage.[MvcApplication7.Models.LogOnModel]", в ответ на котороый получаю ошибку парсера "тип не найден". Если указать тип в формате с#, то aspx парсер его проглатывает, но начинает ругаться компилятор немерле, поскольку это имя типа попадет в сгенерированный *.n файл в исходном виде.

Покопался в исходниках mvc, оказывается mvc хитрым образом обрабатывает атрибут inherits. Если mvc определяет, что в качестве базового класса используется генерик, то подменяет название базового класса на System.Web.Mvc.ViewPage, а исходное значение запоминает во внутренних структурах. Для определения генерика используется такая нехитрая функция:
private static bool IsGenericTypeString(string typeName)
{
    return (typeName.IndexOfAny(new char[] { '<', '(' }) >= 0);
}


видно, что Немерле с квадратными скобками тут пролетает .

Я пока вижу решение только в виде хака: указывать базовый тип в формате c#, а при генерации *.n файла подменять в названиях типов синтаксис шарпа на синтаксис немерле. Для этого нужно поправить метод NemerleCodeGenerator.GetTypeOutput
Но честно говоря мне такой способ совсем не нравится.

Сталкивался ли ктонибудь с этим и получилось ли найти решение?
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.