2012-03-15 125 views
1

我難倒上的圖像問題...繼承人的內幕。MVC 3更新上傳的圖片

在我的佈局,我有作爲一個標誌......然而,在管理視圖有上傳新徽標的能力,它簡單地替換當前一個具有完全相同的名稱的圖像。回發後,即使保存更新的圖像,圖像在佈局上也不會更改爲更新的圖像。如果我刷新頁面使用Ctrl和F5,緩存消失了,我可以看到新的形象,但我需要的是更加自動化。

我的繼承人在佈局

<img src="@Url.Content("~/Content/themes/base/images/Client_Logo.jpg")" id="ClientLogo" alt="" width="227" height="130" style="float: left;" /> 

繼承人的管理視圖

@using (Html.BeginForm("Admin", "Home", FormMethod.Post, new { @encType = "multipart/form-data" })) 
    { 
     <fieldset> 
      <legend>Logo Management</legend> 
      <p> 
       <input type="file" name="FileUpload" /> 
      </p> 
      <p> 
       <input type="submit" value="Upload" /> 
      </p> 
     </fieldset> 
    } 

最後的動作img標籤

[Authorize] 
    [HttpPost] 
    public ActionResult Admin() 
try 
      { 
       HttpPostedFileBase file = Request.Files[0]; 

       if (file != null) 
       { 
        var fileName = Path.GetFileName(file.FileName); 
        var path = Path.Combine(Server.MapPath("~/Content/themes/base/images"), fileName); 
        file.SaveAs(path); 
        System.IO.File.Delete(Path.Combine(Server.MapPath("~/Content/themes/base/images"), "Client_Logo.jpg")); 
        System.IO.File.Move(Path.Combine(Server.MapPath("~/Content/themes/base/images"), fileName), Path.Combine(Server.MapPath("~/Content/themes/base/images"), "Client_Logo.jpg")); 
       } 
       else 
       { 
        ModelState.AddModelError("uploadError", "There is a problem uploading the file."); 
       } 
      } 
      catch (Exception e) 
      { 
       ModelState.AddModelError("uploadError", e); 
      } 
return View(); 

是什麼大家都建​​議以刷新辦上傳圖像後返回視圖時佈局中的圖像?

乾杯。

回答

1

嗯,你可以在該文件中設置緩存頭不要在你的web.config緩存但這並不理想。

怎麼樣的jQuery?

在佈局:

<img src="@Url.Content("~/Content/themes/base/images/Client_Logo.jpg")" id="ClientLogo" alt="" width="227" height="130" style="float: left;" data-src="@Url.Content("~/Content/themes/base/images/Client_Logo.jpg")"/> 

在你看來,你想改變形象:

<script type="text/javascript"> 
    $(function(){ 
      $('#ClientLogo').attr('src',$('#ClientLogo').data('src') + '?t=' + new Date().getTime()); 
    }); 
</script> 
+0

我相信,但是這會工作,我剛剛去了,原來在web.config文件cacheing關閉...最好我不需要高速緩存,因爲它不會被用來作爲互聯網應用,只是內聯網。 – bl4kh4k 2012-03-15 18:46:04

2

我能想到的與一些隨機顯示您的標誌,最快捷的修復,這樣客戶端就不會打類似緩存:

"/images/yourlogo.png?version=123455634" 

的東西總是隨意更換123455634

由於您的圖片的URL將永遠是相同的,畫面總是會被下載。

您可以爲緩存標頭弄糟這個特定的文件,但這是我能想到的最快速的修復。

希望這會有所幫助。

編輯試試這個:

<img src="@Url.Content("~/Content/themes/base/images/Client_Logo.jpg?version=" + DateTime.Now.Ticks.ToString())" id="ClientLogo" alt="" width="227" height="130" style="float: left;" />

+0

嘗試過,但沒有工作...我相信它,因爲圖像是佈局而不是視圖。 – bl4kh4k 2012-03-15 16:04:21

+0

@ bl4kh4k見我的編輯.. – 2012-03-15 18:10:22