1

JavaScript ライブラリを ASP.NET MVC3 Web アプリに統合しています。ライブラリは、それを参照するページの隣にインストールされると想定しているため、ドキュメント相対 URL を使用してそのコンポーネントを見つけます。

たとえば、デフォルトのディレクトリ レイアウトは次のようになります。

container-page.html
jslibrary/
    library.js
    images/
        icon.png
    extensions/
        extension.js
        extension-icon.png

しかし、 のビューからライブラリを参照したいのです/Home/edit。ライブラリをデフォルトでインストールしますScripts\jslibrary\ のビューでライブラリを参照するViews\Home\edit.cshtmlと、ライブラリのドキュメント相対リンクが

images/icon.png 

への要求として終わる

http://localhost/Home/images/icon.png

その結果、ファイルが見つかりません (404) エラーが発生します。検索するルートを構築するにはどうすればよいですか

{anyControllerName}/images/{anyRemainingPathInfo}

そして奉仕する

http://localhost/Scripts/jslibrary/images/{anyRemainingPathInfo} 

?

(完全な開示: 私はまだ IIS 6 を本番環境で使用しており、すぐに IIS7 に移行する可能性はあまりないため、IIS レベルでこれを行う方がよい場合は、IIS6 について説明してください。ありがとう!)

4

3 に答える 3

1

リダイレクトロジックを処理するためのコントローラーを作成できます-たとえば、「画像」コントローラー。パターンを使用して Global.asax ファイルにグローバル ルートを登録します (このタイプのパターンの詳細はこちら:

routes.MapRoute(

    "Images", // Route name

     "{xyz}/{controller}/{path}", // URL with parameters

     new {controller = "Images", action = "Index", path= UrlParameter.Optional} // Parameter defaults);

コントローラーで:

public ActionResult Index(string path)
{
    //format path, parse request segments, or do other work needed to Id file to return... 

    return base.File(path, "image/jpeg"); //once you have the path pointing to the right place...
}

この解決策がうまくいくかどうかはわかりませんが、もっとエレガントなものを考え出すことができれば幸いです。幸運を祈ります!

于 2012-08-06T21:11:06.547 に答える
0

ライブラリを書き直して適切なディレクトリをチェックする以外に、私が考えることができる唯一の解決策は、ライブラリがアクセスできるディレクトリ構造にビュー、ライブラリ、およびサポートファイルを含めることです。もちろん、これはビューを見つける構成方法に関するMVCの規則に違反するため、Razorがビューを検索する方法のカスタムオーバーライドを作成する必要があります。これはそれほど複雑ではありませんが、自分の生活をより困難にする可能性があります。アプリケーションに応じた道路。2つの悪のうちの小さい方のあなたの呼び出し:)(私はライブラリを修正するために行きます)

于 2012-08-13T13:24:26.997 に答える