web-dev-qa-db-ja.com

ASP MVCフレンドリーURLと相対パス画像

ASP.NET MVCページがあり、わかりやすいURLを表示しようとしています。

そのため、ホームコントローラーにCategory Viewがあり、categoryKey値を受け入れてページのコンテンツを取得します。

例: http:// localhost/Home/Category/Bikes 自転車のコンテンツを取得します。

私のGlobal.asax.csには、これを処理するために次のものがあります。

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
      "Category",
      "{controller}/{action}/{categoryKey}",
      new { controller = "Home", action = "Category", categoryKey = "" });

  routes.MapRoute(
      "Default", // Route name
      "{controller}/{action}/{id}", // URL with parameters
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
  );
}

これは問題なく機能し、コンテンツを取得しますが、簡単に編集できるように、コンテンツ管理システムからコンテンツを取得しています。コンテンツ管理で画像を追加すると、相対パスを使用して画像が追加されます。

<img src="../AdminUploadContent/bikes.gif" alt="Bikes" />

ここで、 " http:// localhost/Home/Category "に移動し、その画像タグがベースページにある場合、画像が表示されます。ただし、「 http:// localhost/Home/Category / 」に移動するか、「/ Home/Category/Bikes」/の実際のカテゴリを追加すると、画像が表示されません。画像のプロパティは「 http://localhost/Home/AdminUploadContent/bikes.gif "」を指しています。

相対パスを処理するためにGlobal.aspx.csファイルに入れることができるものはありますか?コンテンツ管理を手動で編集して../../AdminUploadContent/bikes.gifを追加しても、検証を行っているため、最初の../が切り取られています。

18
doug

画像へのパスを生成するときは、 rl.Content メソッドを使用します。

<img src="@Url.Content("~/AdminUploadContent/bikes.gif")" />

または、WebFormsビューエンジンを使用している場合:

<img src="<%= Url.Content("~/AdminUploadContent/bikes.gif") %>" />
40
marcind

相対パス「〜/」を使用して、ページが配置されている現在の仮想ディレクトリを参照できます。 runat = "server"属性を "img"タグに追加し、 "〜"サインイン "src"属性を試してください。

<img runat="server" src="~/AdminUploadContent/bikes.gif" alt="Bikes" />
2

これも機能します。

<img src="@Url.Content("~/Images/yourimage.png")"/>
1
LawMan

たとえば、相対的な../../img.pngからリファラーhttpヘッダーを処理するために必要なパスに書き換えるカスタムhttpモジュールを実装できます。

0
Pavel Nazarov