Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 刷新图像Src_Asp.net_Javascript_Jquery_Asp.net Mvc - Fatal编程技术网

Asp.net 刷新图像Src

Asp.net 刷新图像Src,asp.net,javascript,jquery,asp.net-mvc,Asp.net,Javascript,Jquery,Asp.net Mvc,k、 。。。斯特拉格帮了我一点忙。然而,它仍然不能正常工作。需要同时了解MVC和jQuery的人请 我有一个页面,上面有一个图像,点击后会启动一个对话框,可以上传文件。一旦对话框关闭,该图像将刷新数据库中上载/存储的内容 第一次一切都很好。但是如果我尝试上传第二张图片;第一个图像仍然显示。我的控制器方法似乎也没有第二次被调用。。。下面是我的代码 我还消除了页面被缓存的情况。同样,控制器方法在第二次调用时没有被调用 控制器 [AcceptVerbs(HttpVerbs.Get)] public A

k、 。。。斯特拉格帮了我一点忙。然而,它仍然不能正常工作。需要同时了解MVC和jQuery的人请

我有一个页面,上面有一个图像,点击后会启动一个对话框,可以上传文件。一旦对话框关闭,该图像将刷新数据库中上载/存储的内容

第一次一切都很好。但是如果我尝试上传第二张图片;第一个图像仍然显示。我的控制器方法似乎也没有第二次被调用。。。下面是我的代码

我还消除了页面被缓存的情况。同样,控制器方法在第二次调用时没有被调用

控制器

[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>

$(函数(){
var iphcObject=$(“#”);
iphcObject.children().find('#imageUploadDialog').bind('onClose',function()){
iphcObject.children().find('#image').attr('src','');
});
});

什么是“图像”#它不应该被找到(“img”)?或者给IMG一个ID“image”。

你的
没有ID
图像,所以
。find(“#image”)
不会返回任何元素。

我不知道ASP,但这行:

iphcObject.find('#image').attr('src', '<%=Url.Action("GetNewImage", "Image", new { parentId = Model.ParentId }) %>');
iphcObject.find('#image').attr('src','');
似乎是在最初查看页面时解析的,而不是在上载新图像时解析的

要获取新图像的URL,请在对POST请求的响应中发送该数据。这应该很容易,尤其是当您使用JSON或原始文本进行传输时

对于jQuery端:

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

如果有人知道如何在ASP端做这件事,请编辑这篇文章或制作另一篇

我不知道ASP,但是。。。你检查过HTTP头了吗?可能是浏览器正在缓存图像URL。试试Firefox的LiveHTTPHeaders,看看到底是什么调用进入了服务器。Firebug在这里可能也有一些帮助(它跟踪浏览器中的缓存命中与网络调用)。

您可以在客户端添加任意数字以强制刷新:

  <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>

var src=$(“#img”).attr(“src”);
var计数=0;
setInterval(函数(){
$(“img”).attr(“src”,src+“?”+计数);
计数++;
}, 3000);

如果您有机会将我的链接发布到您的实时网页,将有助于互动。似乎是缓存问题,但不确定如何处理数据库。我已发布了一些其他信息。这绝对不是缓存问题。。。想法..?好吧,如果缓存不是问题,你能把呈现的HTML发布到页面上吗。在第一个显示器上,1个img上传,第二个img上传。这应该是相对简单的,但我认为我们缺少了诊断的一部分我尝试了类似的方法。。。iphcObject.find('image').attr('src',$.post('');但那没用…@Jason,让你的请求处理程序返回URL吧!显然,您不能从客户端执行此操作。服务器端的方法是从数据库获取内容并将其写入响应对象。。。我是否应该让jquery针对一个将文件输出到页面的页面进行发布?@Jason,是的,这就是应该做的。如果从请求输出的只是图像的URL,那么可以在我的代码示例中将“json”更改为“text”。对话框关闭时,图像将刷新为新图像。然而,如果我直接回到对话框并上传了一个新的图像,旧的图像就不会被换成新的。。。想法…?肯定不是缓存。我已准备好以下各项。。。。SetExpires(DateTime.UtcNow.AddMinutes(-1));Response.Cache.SetCacheability(HttpCacheability.NoCache);Response.Cache.SetNoStore();这可以防止页面被缓存…另外,我使用了LiveHttpHeaders,也没有发现缓存方面的任何问题。问题确实出现在首次上传后第二次上传并关闭对话框时,没有发生任何事情。没有请求…如果我在我的模型方法上设置了一个断点,它就不会触发。另外,在第二次上传时LiveHttpHeaders中没有发生任何事情……如果在第二轮上传期间LiveHttpHeaders中没有发生任何事情,那么您的浏览器可能正在缓存原始图像。页面上的缓存标头不工作。一个技巧可能是在第二个/第三个图像URL的末尾添加一个额外的URL参数,这样浏览器就被迫刷新src。只是要明确一点:问题似乎不是页面被缓存了,而是图像被缓存了。Response.Cache.xxxx()方法可能作用于页面,而不是图像。