Закодированный вызов метода расширения UrlHelper не выполнен - PullRequest
2 голосов
/ 20 апреля 2009

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

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 ]

3 голосов
/ 22 июля 2009

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

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

3 голосов
/ 20 апреля 2009

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

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

Идет в конфигурации \ system.web \ pages \ namespaces

0 голосов
/ 28 апреля 2009

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

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

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

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

...