2010-03-16 146 views
1

我遇到telerik RadGrid的問題,我想啓用多行選擇。我也想在選擇或取消選擇一行時去服務器。我創建了一個JavaScript函數來處理網格的客戶端事件(OnRowSelected和OnRowDeSelected)。該功能是這樣的:
__doPostBack()是否可能發送GET請求?

function onOperationRowSelected(sender, eventArgs) { 
      __doPostBack("<%=myControl.ClientID %>", "rowSelected:" + eventArgs.get_itemIndexHierarchical()); 
     } 

其他功能很相似,唯一的區別是,它發送字符串「rowDeselcted」而不是「rowSelected」。

On Page_Load我使用「IsPostBack」檢查請求是否是Post請求,如果是,我檢查它是否是rowSelected或rowdeselected。

我的問題是當我在我的網格上選擇第一個原始數據時,發生Post請求(這是預期的),但是,當我選擇第二行時,發出GET請求,顯然會導致IsPostBack返回false。

我在這裏錯過了什麼?


編輯:我只是檢查Request對象,發現列舉HTTPMethod屬性值是「POST」。它是一個HTTP POST請求,並且IsPostBack返回錯誤?

回答

1

您確定GET請求有正確的事件參數嗎?
我認爲還有其他東西正在發出GET請求。可能是由某個網格,某些資源或AJAX PageMethod調用或URL重寫等一些AJAX魔術或類似的東西。

是頁面名稱default.aspx或類似的東西?有時在某些瀏覽器(無法記住詳細信息)獲取圖像左右(無法記住確切的情況)時,瀏覽器還會點擊「相同文件夾/」URL,從而打開默認頁面。

用FireBug檢查請求,看看它講的是什麼。

+0

事實上,這是一個由網格隱藏的Ajax調用,OnRowSelected首先觸發OnRowDeselcted,也就是說,當您選擇一行時,先前選擇的行觸發OnRowDeselected,默認情況下會發出get請求。 – Galilyou 2010-04-07 11:17:41

2

該功能尊重<form>的操作。這裏的__doPostBack做什麼:

function __doPostBack(eventTarget, eventArgument) { 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) { 
     theForm.__EVENTTARGET.value = eventTarget; 
     theForm.__EVENTARGUMENT.value = eventArgument; 
     theForm.submit(); 
    } 
} 

所以會盡一切形式設置這樣做,這只是通常在asp.net發佈。

那麼有可能嗎?是的,絕對,爲什麼它發生在我不確定的情況下。

2

沒有看到網格生成的標記,我假設它使用一個鏈接與一個JavaScript應用的點擊處理程序來執行回發。然後,我認爲最有可能的罪魁禍首是一個javascript錯誤,它阻止了處理程序的觸發,這會給出處理程序所應用的錨點的默認行爲,在本例中爲GET。我可以給你的最好建議是在Firefox/Firebug中查看它,看看控制檯中是否顯示任何錯誤。

也就是說,您可能希望構建應用程序,以便在禁用javascript的情況下可以正常工作,並且糾正錯誤並找出如果最終發出GET請求時如何響應。

+0

請檢查我的編輯! – Galilyou 2010-03-16 18:55:09

+0

你可能想看看這個論壇帖子:http://forums.asp.net/p/1079528/3172367.aspx。當第一個事件觸發時,是否有可能加載了一個空URL的鏈接? – tvanfosson 2010-03-16 19:16:12

相關問題