2016-05-27 1 views
0

に私は私のコードベースでこののコピーをたくさん持っている:構築CSSリンクカミソリビュー

@if (Context.IsDebuggingEnabled) 
{ 
    <link rel='stylesheet' href='~/Styles/FrontEnd.css' type='text/css' 
} 
else 
{ 
    <link rel='stylesheet' href='/public/css/FrontEnd-min.css' type='text/css' /> 
} 

そして、これが私を刺激されたので、私は場合は、その引きたかったし、ヘルパーメソッドに複製、私はしました:

public static MvcHtmlString IncludeDebugAwareStylesheet(this HtmlHelper htmlHelper, string debugFileName, string liveFileName) 
{ 
    var styleSheetWrapperFormat = "<link rel='stylesheet' href='{0}' type='text/css' />"; 
    var debugInclude = string.Format(styleSheetWrapperFormat, debugFileName); 
    var liveInclude = string.Format(styleSheetWrapperFormat, liveFileName); 
    var isDebug = htmlHelper.ViewContext.HttpContext.IsDebuggingEnabled; 
    return new MvcHtmlString(isDebug ? debugInclude : liveInclude); 
} 

しかし、CSSファイルは認識されません。 私が知る限り、オリジナルでは~が削除されていますが、私の新しいコードではそうではありませんか?

これはなぜですか? Razorに何らかの方法でURLを「処理する」ように伝える必要はありますか?

+2

これに対処するためにバンドルとレイアウトを使用するだけではどうですか?リリースビルドとレイアウトで自動的に縮小されて、1つのファイルでCSSを参照するだけのバンドル。 –

+0

これは理想的だと同意しますが、これは旧式のコードベースなので、現段階では実行可能な変更ではありません。 : – Brondahl

+0

タグビルダを使用すると運が増えるかもしれませんが、それ以外の場合は何もわかりません。return文以外では 'debugInclude'ではなく' debugHtml'を参照してください。 –

答えて

2

プロジェクトに関連する参照を解決するには、UrlHelper.GenerateContentUrlを使用する必要があります。

試してください:~はASP.Net/MVCで "プロジェクトルート" を意味するので

public static MvcHtmlString IncludeDebugAwareStylesheet(this HtmlHelper htmlHelper, string debugFileName, string liveFileName) 
{ 
    var styleSheetWrapperFormat = "<link rel='stylesheet' href='{0}' type='text/css' />"; 
    var debugInclude = string.Format(styleSheetWrapperFormat, UrlHelper.GenerateContentUrl(debugFileName, htmlHelper.ViewContext.HttpContext)); 
    var liveInclude = string.Format(styleSheetWrapperFormat, UrlHelper.GenerateContentUrl(liveFileName, htmlHelper.ViewContext.HttpContext)); 
    var isDebug = htmlHelper.ViewContext.HttpContext.IsDebuggingEnabled; 
    return new MvcHtmlString(isDebug ? debugInclude : liveInclude); 
} 

これがあります。 .cshtmlファイルでは、Razorビューエンジンはこれらの参照を正しい相対URLに自動的にコンパイルしますが、HtmlHelper拡張機能は現在、参照を最初に解決するのではなく、現状でそのまま文字列を入力しています。

+0

これは私が探していたものです:) – Brondahl

0

私が出会った他の解決策は、このリテラルな質問に答えることはできませんが、私のシナリオにとってはより良い解決策です。

altenativeを使用するStyles.Render(fileName) これはSystem.Web.Optimisations Nugetパッケージ/名前空間にあり、基本的にすべての作業を行います。

実際にはが手作業でタグを生成する必要がある場合は動作しません。