我試着問這個問題有點不同之前,但它不明白,所以我會嘗試另一種方式:路線圖像查看文件夾中的Asp.Net MVC 3
我有一個MVC 3應用程序,其中像往常一樣,我在視圖目錄中有視圖。然而,由於各種原因,我需要每個視圖的圖像與視圖本身在同一個文件夾中,即在我的情況下,例如查看/手冊/ EN-US /名稱
下面是我用的路線:
routes.MapRoute(
"Parameter",
"{controller}/{action}/{lang}/{prod}",
new { controller = "Manuals", action = "Product", lang = "en-US", prod = "name" }
);
現在,正如所提到的,我需要的圖像這一觀點是在同一個文件夾中,從而使圖像路徑可以簡單地爲「ATEXSymbol.svg」。
當我只是有這條路線,並使用這樣一個簡單的相對路徑的形象,我得到的是這樣的錯誤:
The view 'da-DK/ATEXSymbol.svg' or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Manuals/da-DK/ATEXSymbol.svg.aspx ~/Views/Manuals/da-DK/ATEXSymbol.svg.ascx ~/Views/Shared/da-DK/ATEXSymbol.svg.aspx ~/Views/Shared/da-DK/ATEXSymbol.svg.ascx ~/Views/Manuals/da-DK/ATEXSymbol.svg.cshtml ~/Views/Manuals/da-DK/ATEXSymbol.svg.vbhtml ~/Views/Shared/da-DK/ATEXSymbol.svg.cshtml ~/Views/Shared/da-DK/ATEXSymbol.svg.vbhtml
因此,基本上,它是在正確的尋找圖像語言文件夾,但沒有產品名稱文件夾部分,並添加了多個視圖擴展名之一。我知道MVC並沒有真正期望在相同的文件夾中這個相對路徑,但我幾乎沒有任何選擇。爲了達到我的目的,我需要將圖像放在同一個文件夾中。
那麼我該如何做到這一點?
編輯:
其實,我錯了上面一點,說路的產品名稱的部分缺失,當然事實並非如此。這部分路徑是視圖本身的名稱。所以基本上,我通過src屬性中的簡單相對路徑(只是圖像文件的名稱)獲得的路徑會爲圖像創建正確的路徑。唯一的問題是,添加視圖文件擴展名...
任何人都知道如何解決這個問題?
編輯2:
順便說一句,我可以使用Url.Content,但由於某種原因,不能正常工作。如果我用這個:
<embed type="image/svg+xml" src="@Url.Content("~/Content/images/da-DK/3153/CheckRotation.svg")"></embed>
...它的作品...但如果我用這個(同樣的事情,但在視圖文件夾中的圖片)...
<embed type="image/svg+xml" src="@Url.Content("~/Views/Manuals/da-DK/CheckRotation.svg")"></embed>
...它不起作用。如果我在Web檢查器中檢查後面示例中的路徑,它看起來像正確的路徑(localhost:49864/Views/Manuals/da-DK/CheckRotation.svg),但帶有無法找到的消息。
編輯3:
引發的思考網站的答案給了我一個解決方案,我不得不修改了一下,因爲我需要的路線建議意見本身。所以我說這條路線:
routes.MapRoute(
"Image",
"{controller}/{action}/{lang}/{prod}",
new { controller = "Manuals", action = "Image", lang = "en-US", prod = "name" }
);
我在路徑做了小幅調整(如建議),因爲督促現在實際上帶有完整的文件名,包括擴展名:
public ActionResult Image(string lang, string prod)
{
var root = Server.MapPath("~/Views/Manuals/");
var filepath = Path.Combine(root, lang, prod); // whatever creates your path here.
return File(filepath, "image/svg+xml");
}
然後在查看我能有這樣的路徑:
<embed type="image/svg+xml" src="@Url.Content("/Manuals/Image/da-DK/CheckRotation.svg")"></embed>
這條路線對我來說很不錯。我認爲問題在於你的行動。你是否返回FileResult而不是ViewResult? –
不,實際上這只是視圖的路線,而我正在返回一個ActionResult。我實際上不知道如何處理SVG圖像的路由或操作。路由嘗試使用該控制器來處理SVG圖像,但如上所述,它不起作用。 – Anders
這條路線看起來不錯。 ActionResult是FileResult和ViewResult的基類。你得到的錯誤是因爲你在你的方法中尋找一個視圖,而不是一個文件。 您是否需要動態加載SVG文件?無論如何,他們不應該在視圖文件夾中。如果您將它們放在內容文件夾中,則可以直接爲它們製作網址,而無需路由。 如果它們是動態的,那麼您正在尋找FileResult來加載SVG併發送字節。 SVG文件本身有動態嗎? –