2009-04-20 8 views
2

Я создал простой метод расширения для ASP.NET MVC UrlHelper. Он не принимает никаких аргументов, поскольку его задачей является поиск имени файла таблицы стилей из конфигурации и возврат URL-адреса в таблицу стилей. Метод расширения выглядит примерно так:Метод расширения URL-адреса UrlHelper не выполнен

public static string SiteStylesheet(this UrlHelper urlHelper) 
{ 
    var scriptFilename = UserInterfaceConfiguration.GetSection() 
          .Mvc.SiteStylesheet; 
    return urlHelper.Content(string.Format("~/Assets/Scripts/{0}", 
              scriptFilename)); 
} 

И я использую это так:

<link href="<%= Url.SiteStylesheet() %>" rel="Stylesheet" type="text/css" /> 

метод не получает казнены, однако, и следующее визуализируется:

href="../Views/Shared/%3C%25=%20Url.SiteStylesheet()%20%25%3E" 

Как вы видите, метод расширения не выполняется, а вся вещь просто закодирована. Если изменить подпись метода принять параметр:

public static string SiteStylesheet(this UrlHelper urlHelper, string dummy) 

то метод расширения выполняется, и выход, как ожидается:

href="/Assets/Stylesheets/FluidCMS.css" 

Так что мой вопрос, то это дизайн или это ошибка в механизме просмотра ASP.NET MVC Web Form?

ответ

3

Эта проблема возникла несколько раз. Корень проблемы состоит в том, что в заголовке < head> есть runat = "server", что заставляет парсер обрабатывать теги как теги сервера.

Простейшим обходным решением является просто удалить runat = "server" из тега заголовка. То, что вы теряете, - это логика, которая делает URL-адрес ссылки относительно текущей страницы, но поскольку вы все равно используете своего помощника, вам это не нужно.

3

Когда у меня была эта проблема, это было потому, что мои методы расширения были в пространстве имен, которое не указано в файле web.config.

<add namespace="Your.Extension.Method.Namespace"/> 

Он идет под конфигурации \ system.web \ страниц \ пространств имен

+1

Спасибо, но пространство имен, которое содержит мой метод расширения, находится в файле web.config, и я все еще вижу такое же поведение. – user93255

+1

Спасибо, упал в этот сам. Также не заметил, что есть 2 web.configs –

0

Я думаю, что вы нашли ошибку!

Я пробовал его и обнаружил, что это происходит только в главном разделе главной страницы и только в тегах <link> (<script> теги отображаются отлично).

Проблема заключается в том, что текст внутри атрибута href неправильно интерпретируется как самородка кода.

Это выходит за рамки ASP.NET MVC. Я попробовал его на главной странице на классическом веб-сайте ASP.NET, и проблема не устранена. Кажется, это ошибка в механизме рендеринга веб-форм или что-то в этом роде.

+0

Спасибо за подтверждение и дальнейшие подробности. На данный момент обходной путь, хотя и взломанный, достаточно прост и не навязчив. Еще раз спасибо. – user93255