asp.net
  • httphandler
  • 2012-01-11 51 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

    相關問題