2013-02-04 49 views
3

大家好,我有我的_layout如下,它按照我的要求工作,但這裏有一些事情我被擊中,即我想顯示相應的圖像,我寫如下從mvc4的_layout數據庫顯示圖像

@if (Session["UserName"] != null) 
{ 
<div class="logged_in" id="user_navigation" runat="server"> 
<a title="Your Profile" href=""> 
<img alt="" src="@Url.Action("GetPhoto", new { photoId = Session["UserName"] })" height="50" width="50" class="photo" /> 
</a> 
</div> 
} 

但這並非顯示圖像按需要我,所以可以有一個人幫助我,我想從數據庫中顯示的圖像用戶登錄後,我也想在顯示session值一些控制也

這是我的控制器代碼

public ActionResult GetPhoto(string photoId) 
     { 
      byte[] photo = null; 
      var v = db.tblUsers.Where(p => p.UserName == photoId).Select(img => img.Photo).FirstOrDefault(); 
      photo = v; 
      return File(photo, "image/jpeg"); 
     } 
+0

'但這並沒有工作了me' - 什麼沒有工作?發生了什麼?你有錯誤嗎?你能描述一下你遇到的問題嗎?是否調用GetPhoto行動?爲什麼您將當前經過身份驗證的用戶名作爲查詢字符串參數傳遞 - 這是一個巨大的安全漏洞? –

+0

無法按照書面形式顯示圖像 – Dotnet

+1

好的,問題:控制器操作是否被調用?你在Session [「UserName」]裏面有什麼?你在生成的HTML中看到什麼?有沒有'img'標籤?它的'src'指向什麼? –

回答

6

您似乎遇到了<img>語法的問題。它應該是這樣的:

<img alt="" src="@Url.Action("GetPhoto","User", new { photoId = Session["UserName"].ToString() })" height="50" width="50" class="photo" /> 

根據的評論部分,你似乎已經習慣了在的WebForms實際代碼(<%= Html.Encode(Session["UserName"]) %>)查看發動機。

這就是說你有這個代碼更嚴重的問題。永遠不會將當前已通過身份驗證的用戶作爲參數傳遞。這是一個巨大的安全漏洞。因此,通過擺脫它開始:

<img alt="" src="@Url.Action("GetPhoto", "User")" height="50" width="50" class="photo" /> 

,然後你的控制器動作中,你可以檢索:

public ActionResult GetPhoto() 
{ 
    string user = Session["UserName"] as string; 
    byte[] photo = db 
     .tblUsers 
     .Where(p => p.UserName == user) 
     .Select(img => img.Photo) 
     .FirstOrDefault(); 
    return File(photo, "image/jpeg"); 
}