2009-02-02 37 views
3

k ... Strager能夠幫助我一點。但是,它仍然不太正確。需要有人知道MVC和jQuery請...Refresh A Image Src

我有一個頁面,有一個圖像,當點擊將啓動一個對話框,可以上傳文件。一旦對話關閉,圖像應該刷新/存儲在數據庫中的內容刷新...

所有的作品第一次出色。但是,如果我嘗試上傳第二張圖片,第一張圖像仍然顯示。它也似乎並沒有像我的控制器方法被稱爲第二次...下面是我的代碼...

我也消除了頁面正在緩存。同樣,在控制器方法不被稱爲第二次左右......

控制器

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult GetImage(Guid parentId) 
{ 
    var la = Helper.Service.GetAttachmentByEntity(parentId, MembershipProvider.SecurityTicket).ToList(); 
    la.OrderByDescending(x => x.CreatedDate); 

    return File(la[0].Data, la[0].ContentType); 
} 

查看

<script type="text/javascript"> 
    $(function() { 
     var iphcObject = $('#<%=imagePlaceHolderControl.ClientID %>'); 

     iphcObject.children().find('#imageUploadDialog').bind('onClose', function() { 
      iphcObject.children().find('#image').attr('src', '<%=Url.Action("GetImage", "Image", new { parentId = Model.ParentId }) %>'); 
     }); 
    }); 
</script> 

<asp:Panel ID="imagePlaceHolderControl" runat="server"> 
    <div style="border: solid 1px; width: <%=Model.Width%>; height: <%=Model.Height%>; text-align: center; vertical-align: middle;"> 
     <a href="#" onclick="$('#imageUploadDialog').dialog('open');" title="Add a picture..."> 
     <img id="image" src="<%=Url.Content("~/content/images/icon_individual_blank.gif") %>" /></a> 
     <%Html.RenderDialog("imageUploadDialog", "Upload image...", "ImagePlaceHolder_Upload", "Image", Model, 235, 335); %>   
    </div> 
</asp:Panel> 
+0

任何機會,你可以發佈我鏈接到您直播的網頁,將有助於交互。看起來像一個緩存問題,但不知道你是如何處理數據庫的東西 – 2009-02-02 22:06:14

+0

我已經發布了一些額外的信息。它肯定不是一個緩存問題......想法..? – Jason 2009-02-03 02:15:56

+0

好吧,如果緩存不是問題,你可以發佈什麼HTML呈現給頁面。第一次顯示時,1 img上傳,第二次img上傳。這應該是相對簡單的,但我認爲我們缺少診斷的部分 – 2009-02-03 15:50:56

回答

1

什麼是#image應該不是被找到( 'IMG')?或者給IMG一個「圖片」ID。

0

您的<img>沒有ID image所以.find('#image')沒有返回任何元素。

1

我不知道ASP,但此行:

iphcObject.find('#image').attr('src', '<%=Url.Action("GetNewImage", "Image", new { parentId = Model.ParentId }) %>'); 

出現在最初查看頁面的時間被解析,而不是在新的圖像上載。

要獲取新圖像的URL,請在POST請求的響應中發送該數據。這應該很容易,特別是如果您使用JSON或原始文本進行傳輸。

對於jQuery的一面:

$.post('<%=Url.Action("GetImage", "Image", new { parentId = Model.ParentId }) %>', {}, function(data) 
{ 
    iphcObject.find('#image').attr('src', data.newImageUrl); 
}, 'json'); 

如果有人知道如何做到這一點的ASP側,請編輯這篇文章,或進行另一個!

0

我不知道ASP,但是...你檢查過HTTP頭文件嗎?這可能是圖像URL正在被瀏覽器緩存。嘗試用於Firefox的LiveHTTPHeaders,並查看實際將哪些調用發送到服務器。 Firebug在這裏也可能有一些幫助(它跟蹤瀏覽器中的緩存命中與網絡呼叫)。

1

您可以在任意數量的釘強制在客戶端刷新:

<img id="img" src="@Url.Action("GetImage")" alt="random" /> 
    <script type="text/javascript"> 

    var src = $("#img").attr("src"); 
    var count = 0; 

    setInterval(function() { 
     $("#img").attr("src", src + "?" + count); 
     count++; 
    }, 3000); 

    </script>