2014-03-24 44 views
1

我有一個問題,有點難以解釋的圖像,所以希望這會有道理。我正在使用ASP.NET MVC 4 Razor。我有一個區域設置,我正在使用根目錄中的佈局頁面。除了一個小問題外,一切工作都正常。當我在一個區域中使用ActionLink時,我的頁面呈現得很好,包括佈局頁面(頁面上的圖像除外)。如果我在我的控制器中使用RedirectToAction,一切都呈現良好,包括圖像。我可以看到圖像的位置呈現不同,但我不知道爲什麼或如何解決它。對於區域中的圖像,ASP.NET MVC ActionLink與RedirectToAction

下面是位於根我的佈局頁:

<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8" /> 
     <title>@ViewData("Title") - eLAD</title> 
     <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" /> 
     <meta name="viewport" content="width=device-width" /> 
     @Styles.Render("~/Content/css") 
     @Scripts.Render("~/bundles/modernizr") 
    </head> 
    <body> 
     <div id="container"> 
     <header> 
      <div class="content-wrapper"> 
       <div class="float-left"> 
        <p class="site-title"><img src="../../Images/digital_blue_std.jpg" alt="" height="50px" style="vertical-align:middle" /> @Html.ActionLink("company name", "Index", "Home")</p> 
       </div> 
       <div class="float-right"> 
        <section id="login"> 
         @Html.Partial("_LoginPartial") 
        </section> 
        <nav> 
         <ul id="menu"> 
          <li>@Html.ActionLink("Home", "Index", "Home", New With {.area = ""}, Nothing)</li> 
          <li>@Html.ActionLink("About", "About", "Home", New With {.area = ""}, Nothing)</li> 
          <li>@Html.ActionLink("Contact", "Contact", "Home", New With {.area = ""}, Nothing)</li> 
         </ul> 
        </nav> 
       </div> 
      </div> 
     </header> 
     <div id="body"> 
      @RenderSection("featured", required:=false) 
      <section class="content-wrapper main-content clear-fix"> 
       @RenderBody() 
      </section> 
     </div> 
     <footer> 
      <div class="content-wrapper"> 
       <div class="float-left"> 
        <p>&copy; @DateTime.Now.Year</p> 
       </div> 
      </div> 
     </footer> 
     </div> 
     @Scripts.Render("~/bundles/jquery") 
     @RenderSection("scripts", required:=False) 

    </body> 
</html> 

而且我有一個名爲OwnedQuote一個區域,我的大部分意見和控制器是所以我們可以說我有這個URL/OwnedQuote/AircraftRegNumber /。創建我需要在控制器中使用RedirectToAction(由於堆棧溢出需要,省略了URL的http localhost部分)。如果你在這種情況下查看圖像的屬性,圖像的url是:/Images/digital_blue_std.jpg這就是我想要的。但是,當使用該頁面的動作鏈接到同一區域中的另一頁面時,同一圖像的URL爲:/OwnedQuote/Images/digital_blue_std.jpg。注意現在增加的區域是一個問題,因爲圖像不存在於這個位置。我的動作鏈接命令只是:

@Html.ActionLink("Referral to UW", "ReferToUW", "Referral", New With {.id = Model.Aircraft.ID}, Nothing) 

佈局頁面和正文部分的其他內容都是正確的。所以我不確定爲什麼在使用Html.ActionLink和RedirectToAction時圖像URL不同。我需要它的行爲與RedirectToAction相同。

回答

2

首先,不要在您的應用程序中使用類似的路徑。你想使用已知的參考點。由於您使用的是使用Razor 2的MVC 4,因此剃鬚刀本身就可以理解您的網站根目錄。所以你只需要做這樣的事情:

<img src="~/Images/myImage.jpg"> 

其中〜是你的網站的根。在MVC3您必須使用Html.Content這樣的:

<img src="@Html.Content("~/Images/myImage.jpg")" > 

原因您的問題是,你在不同的URL的結束了,因爲MVC路由默認動作處理的,您可以查看相同的動作來自兩個不同的網址路徑。問題是兩個路徑的圖像不存在相同的偏移量,所以你會遇到問題。使用站點相對路徑解決了這個問題。

記住,當你做類似「../../blah」的事情時,它會從URL路徑獲取相對路徑,而不是頁面動作路徑。這是因爲瀏覽器正在加載圖像,而不是服務器,瀏覽器除了當前路徑之外什麼都不知道。

+0

這是非常有意義的,並解決了我的問題。感謝您的快速回復和解釋。 – user2759835