2016-12-31 107 views
1

我有一個數據庫和一個dbinitializer類,用測試數據填充數據庫。我的一個表中的一列是用於存儲圖像的字符串路徑。即:圖像=「〜/內容/圖像/ example.img」從mvc.net核心數據庫中加載圖像

然後我的視圖模型應該爲表中的每個項目呈現圖像。

@foreach (var item in Model) { 
     <img style="width:200px;height:250px;" src="@Url.Content(item.Image)" alt="@item.Name" /> 

} 

這個確切的方法,適用於我的正常MVC應用程序,但是當我試圖模仿我的核心完全相同的程式圖像的arent渲染。有誰知道我爲什麼可以解決這個問題?

回答

2

在ASP.NET核心中,默認情況下僅從wwwroot文件夾提供靜態文件。這意味着如果您嘗試從內容/圖像(這是您的根目錄)訪問文件,它將無法工作。

好消息是,您可以根據需要配置靜態文件位置。因此在啓動時更新您的Configure方法。現在

public void Configure(IApplicationBuilder app, IHostingEnvironment env, 
                  ILoggerFactory loggerFactory) 
{ 
    // Your existing code goes here 

    app.UseStaticFiles(); 

    app.UseStaticFiles(new StaticFileOptions() 
    { 
     FileProvider = new PhysicalFileProvider(
       Path.Combine(Directory.GetCurrentDirectory(), @"Content/Images")), 
     RequestPath = new PathString("/Images") 
    }); 
} 

這些圖像可以從瀏覽器進行訪問這樣yourSiteName/Images/imageFile.png

現在你可以解決您的視圖代碼從這個路徑獲得的圖像。

@foreach (var item in Model) 
{ 
    <div> 
     <img src="@Url.Content("~/Images/"+item.Image)" /> 
    </div> 
} 

假設爲收藏的每件item.Image值都有這樣MyImage.png一定的價值,你有一個名爲MyImage.png圖像位於Contents/Images這是在您的應用程序根目錄(not in the wwwroot directory

您也可以考慮將圖像移動到wwwroot目錄,因爲ASP.NET團隊爲此目的添加了該目錄(靜態資產)。

+0

當我發佈這篇文章後,我記得看到wwwroot文件夾並改變了我的item.Image字符串,但我似乎無法使它與該路徑一起工作。即:〜/ wwwroot/images/cardImages。 我認爲可能還有一些其他微妙的細微差別,我不知道? – tocoolforscool

+0

css文件和其他一切都在這個默認的根文件夾中,我想用Core的約定來滾動。我被一個好友建議我應該使用核心,因此我試圖遷移我的項目 – tocoolforscool

+0

正如我在答案中所解釋的,如果您的圖像位於'wwwroot'目錄內,您可以通過GET請求訪問其中的項目(只需嘗試訪問瀏覽器中的資源)。這是因爲asp.net核心允許來自該位置的靜態文件服務。如果您在Content文件夾中具有這些圖像(在應用程序根目錄中,如pre asp.net核心應用程序樣式),則需要更新到Configure配置方法。 – Shyju