0

私は MVCContrib の最新バージョンを使用しており、次のヘルパー メソッドを使用してスタイルシートを含めようとしています。

<%=Html.Stylesheet(Links.Content.Site_css)%>

レンダリングされたパスは、次のように誤って計算されます。

<link type="text/css" rel="stylesheet" href="/content/css/Content/Site.css" />

実際のパスは次のようになります: /Content/Site.css

これはバグですか?

次の方法は正しく機能します。

方法 1: <%=Html.Stylesheet("~/Content/Site.css")%>

方法 2: <link type="text/css" rel="stylesheet" href="<%:Links.Content.Site_css %>" />

更新 1:

Links.Content.Site_css は、T4MVC を使用して自動生成される静的フィールドを表します

更新 2: T4MVC によって生成されたコードは次のようになります...

namespace Links {

    ...snipped for brevity...

    [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
    public static class Content {
        private const string URLPATH = "~/Content";
        public static string Url() { return T4MVCHelpers.ProcessVirtualPath(URLPATH); }
        public static string Url(string fileName) { return T4MVCHelpers.ProcessVirtualPath(URLPATH + "/" + fileName); }

        public static readonly string Site_css = Url("Site.css");
}
4

1 に答える 1

2

バグではありません。これは期待どおりに機能します。MvcContrib ScriptInclude、Stylesheet、および T4MVC の使用を参照してください。

T4MVC リンクの出力は、解決された相対パスです (「~」がなくなったことを意味します)。MVC Contrib ヘルパーは、渡された URL に「~」がない場合、スクリプトの場合は「~/Scripts/」、スタイルの場合は「~/content/css/'」のいずれかを先頭に追加すると想定します。スクリプト、スタイル、および画像を「~/Content」フォルダーの下に移動したことを確認すると、MVC Contrib Html ヘルパーにいくつかの変更が加えられているため、これを機能させることができます…先頭に追加されるパスを定義する何らかのメカニズムを提供します"~" がない場合はスクリプトとスタイル パス情報を前に追加しない別のオプションで Html ヘルパーをオーバーライドします URL の前にパスを追加する必要があるかどうかを判断する際に、"~" の代わりに "/" を検索する可能性があります

于 2010-07-26T16:55:20.043 に答える