Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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
C# 回发时未触发Webhandler_C#_Asp.net_Session_Dynamic Data - Fatal编程技术网

C# 回发时未触发Webhandler

C# 回发时未触发Webhandler,c#,asp.net,session,dynamic-data,C#,Asp.net,Session,Dynamic Data,我有一个上传图像的web应用程序,图像随后保存到服务器的临时文件夹中,并通过aspx页面上的webhandler显示 aspx的代码: <img src="PreviewImageQualityHandler.ashx" alt="Picture not loaded" runat="server" id="imagePreview" /> 我的问题是webhandler只在第一次上传图像时启动。如果我尝试上传一个新图像,webhandler永远不会启动 如果我从webhandle

我有一个上传图像的web应用程序,图像随后保存到服务器的临时文件夹中,并通过aspx页面上的webhandler显示

aspx的代码:

<img src="PreviewImageQualityHandler.ashx" alt="Picture not loaded" runat="server" id="imagePreview" />
我的问题是webhandler只在第一次上传图像时启动。如果我尝试上传一个新图像,webhandler永远不会启动

如果我从webhandler中删除与会话相关的所有内容,它会在每次回发时触发,这是应该的

如果有人能解释我的问题,我将不胜感激

问候


弗朗西斯

好的,重写我的答案(如果你没有看到以前的答案,请参阅历史)。关于代码的一些注释:

  • 不要使用
    响应。编写
    。您无法确定它何时写入,并且通常无法在浏览器中看到它。使用
    asp:Literal
    控件或
    asp:Label
    。与当前问题相关,因为:如果你在浏览器中看不到它,可能你认为什么都没有发生

  • 您没有保护文件流的打开/关闭。在其周围使用-块添加一个
    ,以便正确关闭和处理流。按照当前的方式,只要线程处于活动状态,文件就会保持打开状态,这相当长

    using(Bitmap bmp = (Bitmap)System.Drawing.Image.FromFile(sessID))
    {
         //.. your code...
         using(MemoryStream.... etc)
         {
             ....
         }
    }
    
    不关闭的问题:下一次您将无法将新文件写入同一位置,您可能无法打开它进行读取,并且当代码启动时,您将很快用完可用的文件处理程序

  • 不确定您对课程的期望。但是最好在图片中使用一些ID,将其与当前用户信息一起存储在数据库中,并将其作为请求查询字符串添加到图像URL中。这样,您就不会遇到会话问题:

    <img src="myimage.ashx?id=1234" />
    
    
    
    或者,
    1234
    指的是磁盘上的东西,或者它指的是数据库中的东西,而数据库又指的是磁盘上的东西(更安全)

  • 如果您不确定浏览器是否重新发送请求,请使用FireFox中的FireBug,它会提供HTTP请求和响应的全部详细信息。如果使用相同的名称,浏览器将不会每次发送新请求(除非您处于调试模式)

  • 您正在使用一个捕获所有异常处理程序。在那里写一些东西,或者在那个位置放一个断点。catch-all异常处理程序非常危险:许多异常永远不会被看到。很可能,您当前的代码会抛出一个异常(参见上面的第2点),就是这样。删除异常处理程序,然后VisualStudio调试器将捕获异常,这样您就知道发生了什么


  • 我知道,总的来说有些问题。一个接一个地检查一下,看看是否有帮助。至少,您的代码会变得更加稳定。

    不幸的是,Francis,我似乎无法复制您看到的错误。也许在您发布的代码之外有什么东西导致了问题?我的赌注是在某处缓存。不知道是什么,也不知道在哪里。非常感谢!确实是图像的缓存问题。这可能有点“顽皮”,但“imagePreview.Src=”PreviewImageQualityHandler.ashx“+”?x=“+DateTime.Now;”让我摆脱痛苦!回答。写(“”);仅用于调试目的,将被删除。我很高兴它现在起作用了。请注意,即使出于调试目的,
    Response.Write
    也可能会对HTML或浏览器呈现HTML的方式造成严重破坏,这可能会导致许多副作用,导致比解决问题更多的问题。相反,考虑使用<代码>调试>编写< /COD>调试输出,并监视VisualStudio的调试窗口。另外:在投入生产时,
    调试。编写
    不会妨碍您的代码。再次感谢!我一定会重新编写代码,使用“using”。我已经考虑过在数据库中放置一个唯一的ID,但是由于用户登录的方式,该用户ID在mypage.aspx?ID=1234中不可用,所以我的同事建议我不要这样做。不带任何内容的catch all用于调试,其中有一个断点:)。我完全不知道Debug.Write()。从现在起,我将使用它。非常感谢您抽出时间!问候弗朗西斯
    
    using(Bitmap bmp = (Bitmap)System.Drawing.Image.FromFile(sessID))
    {
         //.. your code...
         using(MemoryStream.... etc)
         {
             ....
         }
    }
    
    <img src="myimage.ashx?id=1234" />