2009-02-02 57 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>