2

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 フォーム ビュー エンジンのバグですか?

4

3 に答える 3

3

この問題は何度も発生しています。問題の根本は、<head>タグにrunat = "server"があることです。これにより、パーサーはタグをサーバータグとして扱います。

最も簡単な回避策は、headタグからrunat="server"を削除することです。失われるのは、現在のページを基準にしてリンクURLを作成するロジックですが、とにかくヘルパーを使用しているため、これは必要ありません。

于 2009-07-22T18:11:02.173 に答える
0

バグを見つけたと思います!

試してみたところ、これはマスターページのヘッドセクションとタグでのみ発生することがわかりました<link><script>タグは正常にレンダリングされます)。

問題は明らかに、de href 属性内のテキストがコード ナゲットとして正しく解釈されないことです。

これは、ASP.NET MVC を超えています。従来の Web フォーム ASP.NET サイトのマスター ページで試してみましたが、問題は解決しません。Web フォーム レンダリング エンジンのバグなどのようです。

于 2009-04-28T14:28:05.090 に答える