2012-01-20 5 views
4

これは簡単な質問のようですが、私の人生の答えを見つけることはできません。ルート相対URL(~/my/path)をコントローラおよび/またはモデルの仮想パス(/mywebsite/my/path)に変換するにはどうすればよいですか?ASP.NET MVC3コントローラまたはモデルの仮想パスへのルート相対パス

ビューでは、簡単に行うことができます。ちょうど@Url.Content("~/my/path/")を呼び出してください。コントローラーの物理的なパスを取得するのは、Server.MapPath("~/my/path")を使用するだけで簡単です。しかし、私はコントローラ内で仮想パスを取得する方法を理解することはできません。

私の主な問題は、返されるJSONオブジェクトに渡すイメージのルート相対パスがあることです。ほとんどの場合、これはjavascriptによって読み込まれ、どこかのページに置かれ、私は@Url.Contentをjavascriptコードで使用することはできません。また、場合によっては、このJSONオブジェクトは、~の意味を理解しない外部アプリケーションによって使用されます。あなたはこのような何もしないモデルでは

public ActionResult Foo() 
{ 
    string url = Url.Content("~/my/path"); 
    ... 
} 

:あなたはUrlプロパティを使用することができ、コントローラで

+0

コントローラでUrl.Contentも正常に動作するはずです(文字列が返されます)。その名前空間System.Web.Mvc – StuartLC

+0

なぜコントローラへの仮想パスが必要ですか? – Phill

+0

@Phill - 私は実際にJSONオブジェクトで返すイメージへの仮想パスが必要です。私は質問を更新します。 –

答えて

6

。モデルはURLの生成について何も知らないはずです。それは単にその責任ではありません。 URLを扱う必要がある場合は、url(HttpContextにアクセスできるレイヤー)を扱うアプリケーションのレイヤーによって、このURLを渡す必要があります。