asp.net
  • httphandler
  • 2012-01-11 56 views 1 likes 
    1

    我能够通过使用HttpHandler来设置一些ASP.NET图像控件来渲染数据库中的图像。ASP.NET HttpHandler和匹配频率

    // Notice the ImageHandler.ashx 
    <asp:Image ID="imgSrvcGrp" runat="server" ImageUrl='<%# DataBinder.Eval(Container.DataItem, "ServiceGroupID", "~/ImageHandler.ashx?id={0}") %>' /> 
    

    它工作的很好,而且设置起来非常容易。我的问题如下...

    我注意到HttpHandler(ImageHandler.ashx)在我不期望的某些时候被击中。例如,我在页面的Page_Load事件中有一个断点,该事件包含消耗HttpHandler的图像标记和处理程序本身中的另一个断点,并且我发现即使没有回发(即 - Page_Load断点是没有命中)处理程序有时会被击中(即 - 处理程序中的中断点被击中)。

    奇怪的是,当我在页面上关闭一个jQuery对话框时发现了这种情况。我在页面上有一个jQuery对话框弹出窗口,并且我发现当关闭jQuery弹出窗口(通过单击X)时,图像处理函数会在页面上的每个图像上使用它,但不会发生回发。

    我可以考虑添加的唯一其他细节是我的网页正在使用Telerik的RadTabStrip,并且它有可能对此有影响。

    我意识到我的解释相当冗长,所以要更加简洁地回答我的问题:为什么我的图像处理程序会被频繁命中,即使没有发生回发?

    +0

    我希望这会在所有页面加载时发生,而不仅仅是回发。 – Oded 2012-01-11 17:33:44

    +0

    它在每个页面加载时都被击中,但是处理程序甚至在没有回传时也是如此。但是,大卫的回答为我澄清了一些事情。 – Jagd 2012-01-11 17:58:35

    回答

    1

    因为加载页面资源和发布表单是不同的操作。

    不要从ASP.NET的角度来考虑它,回传和Page_Load处理程序和whatnot。从浏览器中的实际HTML角度考虑它。 “回发”只不过是张贴到一个页面上的表格。如果您没有做任何事情来触发表单帖子,则该页面不会回发。

    但是,页面在请求其他资源时触击服务器。 CSS文件,JavaScript文件,图片等等。页面需要加载的HTML内引用的资源。所以当一个页面被加载时,它不会仅仅击中一次服务器。它命中服务器以获取HTML文档(这是页面的Page_Load被触发的地方),并且在它呈现HTML时,它会一次又一次地访问HTML文档中引用的每个资源的服务器。

    如果页面隐藏/显示动态样式调整的资源,那么它不应该在每次显示它们时重新加载这些资源。但是,如果页面正在做某些事情导致它不得不重新呈现已加载的内容(并且该内容没有在浏览器中缓存),那么它会触发服务器。这将是导致ASHX处理程序受到攻击的原因。

    对于你的一个建议是用一些调试工具加载页面(Firefox中的FireBug仍然是我个人的选择),并观察页面上进出的实际流量(FireBug中的“Net”标签,在其他工具中可能类似)。这可以帮助您确定正在请求的内容以及可能请求的内容。例如,如果RadTabStrip出于某种原因从页面中删除img元素并重新添加元素,它会每次从服务器请求图像。

    +0

    谢谢大卫。我会对它进行一些深入的研究,看看我是否无法确定是什么导致页面刷新其上的图像。我现在要解决这个问题,以防我对此问题有更多的意见/问题要补充。再次感谢! – Jagd 2012-01-11 17:54:18

    相关问题