4

たとえば、Views/Home/Index.aspx にページがあり、Views/Home/Index.js に JavaScript ファイルがある場合、aspx ページでこれをどのように参照しますか?

以下の例は、コンパイラがパスが正しいと言っていても機能しません

<script src="Index.js" type="text/javascript"></script>

まったく同じ問題がここに詳細に投稿されています: http://forums.asp.net/p/1319380/2619991.aspx

これが現在不可能である場合、将来可能になりますか? そうでない場合、大規模な Asp.net MVC プロジェクトの JavaScript リソースをどのように管理していますか? View フォルダ構造を反映する Content フォルダにフォルダ構造を作成するだけですか? うん!

4

5 に答える 5

3

以下のように VirtualPathUtility.ToAbsolute メソッドを使用して、アプリの .js ファイルの相対 URL を、ページに書き込むことができる絶対 URL に変換できます。

<script type="text/javascript" src="<%=VirtualPathUtility.ToAbsolute("~/Views/Home/Index.js") %>"></script>
于 2008-09-17T02:23:29.450 に答える
1

HtmlHelperの優れた拡張メソッドは次のとおりです。

public static class JavaScriptExtensions
{
    public static string JavaScript(this HtmlHelper html, string source)
    {
        TagBuilder tagBuilder = new TagBuilder("script");
        tagBuilder.Attributes.Add("type", "text/javascript");
        tagBuilder.Attributes.Add("src", VirtualPathUtility.ToAbsolute(source));
        return tagBuilder.ToString(TagRenderMode.Normal);
    }
}

次のように使用します。

<%=Html.JavaScript("~/Content/MicrosoftAjax.js")%>
于 2008-09-17T06:55:18.720 に答える
1

Content フォルダーを使用する共有 JavaScript リソースの場合は理にかなっています。私が特に解決しようとしていた問題は、再利用されないaspxページ固有のjavascriptでした。

私がしなければならないことは、aspxページ固有のjavascriptをページ自体に配置し、共有jsリソースをContentフォルダーに保持することだと思います。

于 2008-09-17T03:49:10.883 に答える
1

スクリプト用にフォルダー構造を分離する必要があります。たとえば、アプリケーション ルートの下の JavaScript フォルダー。ビューを使用して js ファイルを保存すると、パス解決の問題に影響するだけでなく、セキュリティと権限の低下にも影響します。また、後で専用のサブフォルダーに格納されているアプリケーション パーツの一部を個別に展開することにした場合は、後で JS ファイルをアセンブリ リソースとして埋め込む方がはるかに簡単です。

于 2008-09-17T02:26:30.707 に答える
0

ページをカスタム RouteHandler に再ルーティングする場合、RequestContext を MvcHandler クラスに処理する前に、ファイルの存在を確認できます。

例 (完全ではありません):

public class RouteHandler : IRouteHandler
{
    public IHttpHandler 
    GetHttpHandler(RequestContext requestContext)
    {
        var request = requestContext.HttpContext.Request;

        // Here you should probably make the 'Views' directory appear in the correct place.
        var path = request.MapPath(request.Path); 
        if(File.Exists(path)) {
            // This is internal, you probably should make your own version.
            return new StaticFileHandler(requestContext);
        }
        else {
            return new MvcHandler(requestContext);
        }
    }
}
于 2011-11-11T13:32:14.933 に答える