2009-05-22 9 views
0

我有一個ASP.NET 3.5頁與gridview數據綁定到一個通用的對象列表。此頁面的目的是向用戶顯示他們負責的項目列表,以便他們可以選擇一個項目並轉到維護頁面以查看該項目的詳細信息。asp.net gridview鏈接似乎是「過期」 - 如何停止?

我將AutoGenerateSelectButton屬性設置爲True。我沒有問題,當用戶立即選擇其中一個項目(發射.SelectedIndexchanged事件,我做了一些處理和Response.Redirect他們到適當的頁面)。

但是,如果我等幾分鐘,然後點擊選擇,我得到無法顯示網頁就好像我已斷開網絡。沒有消息被髮送到應用程序的日誌文件(調試消息應該表明用戶選擇了一個特定的項目,並且重定向即將發生),所以我沒有什麼可以陷入/調試/修復。

我試圖進入在web.config和希望,超時會去到一個小時(用戶會經常讓應用坐在自己的屏幕上相當長的一段),但沒有按添加

"<sessionState timeout="60"></sessionState>" 

似乎沒有工作。

我還能在哪裏看?

+0

你可以添加更多的信息,如果你在selectedindexchanged上設置斷點會發生什麼......它會觸發嗎? – Stuart 2009-05-22 13:31:53

+0

它永遠不會到達SelectedIndexChanged方法。事實上,它甚至從來沒有爲Postback啓動Page.Load。 – David 2009-05-22 13:58:36

回答

0

我有一個非常類似的問題。你可能討厭這個答案,因爲它有點乏味,但我在Gridview_RowCreated中編程添加了一個按鈕,它允許更多的權力。

頁面加載在網格中添加一列。

If Not IsPostBack Then 
     Dim field As New TemplateField 
     field.HeaderText = "Maintenance" 
     Dim col As DataControlField = field 
     GridView.Columns.Add(col) 

--add這裏

For i = 0 To GridView.Rows.Count - 1 
      Dim alinkbutton As New Linkbutton 
      GridViewCshr.Rows(i).Cells(3).Controls.Add(alinkbutton) 
     Next 
End If 

鏈接按鈕(添加按鈕,網格是在第三列,但其添加等。無論您以編程方式添加新列)

- - 然後在GridView_rowcommand

Response.Redirect("url") 
+0

gridview的.SelectedIndexChanged(當用戶選擇一個項目,然後應該被重定向到詳細頁面)。當用戶嘗試排序gridview(Gridview.Sorting)時也會發生這種情況。在第一種情況下,我只是確定他們選擇哪一行,從該行獲取一個ID,設置Session變量(下一頁將讀取)和Response.Redirect他們到新的頁面。 – David 2009-05-22 14:01:40

+0

好的。還有一個問題。你是以編程方式將數據綁定到這個網格還是你爲表單上的gridview選擇了一個數據源? – Eric 2009-05-22 14:14:53

+0

以編程方式。具體來說: grdRequests.DataSource = lstRequests grdRequests.DataBind() lstRequests是「Request」對象的通用列表。這個想法是選擇一個並進入維護頁面。但是,當我點擊「選擇」(當我等待足夠長的時間 - 如果沒有,它只是愉快地處理它應該的方式),我甚至沒有擊中Page.Load – David 2009-05-22 14:22:33

0

我可以從你的web.config中看到extr表明你正在運行正在進行的sessionState(默認模式)。在這種模式下,會話狀態在IIS工作進程的進程中有效地保存在內存中。這意味着當處理您的應用程序的IIS工作進程終止時,例如由於IIS正在回收應用程序池,會話狀態已被清除。

您可以嘗試增加應用程序池配置上工作進程的空閒時間(默認值爲20分鐘)。

對於IIS6

  1. 在IIS管理器中,展開本地計算機 ,展開應用程序池, 右鍵單擊該應用程序池, 然後單擊屬性。
  2. 在性能選項卡上,在空閒 超時下,取消選中關機工作人員 進程空閒後檢查 框。 - 或 -
  3. 在分鐘框中,鍵入閒置分鐘數 (無處理 請求)要關閉空閒工作 過程之前的等待 。默認值爲20 分鐘
  4. 單擊確定。

對於IIS7

  1. 打開INETMGR
  2. 展開適當的服務器
  3. 點擊「應用程序池」
  4. 右鍵單擊在您的應用程序正在運行,然後從上下文菜單中的應用程序池選擇「回收」
  5. 取消選擇所有複選框,單擊「下一步」並單擊「完成」
  6. 右鍵單擊運行應用程序的應用程序池,然後從上下文菜單中選擇「高級設置...」
  7. 在「Process Model」下將某個較大的值設置爲「Idle Time-Out(minutes)」
  8. 單擊「確定」

但是,將長時間運行的應用程序(如您的會話狀態)移出進程會好得多。這是一個相當簡單的程序,將爲您節省大量與會話有關的麻煩。文章http://msdn.microsoft.com/en-us/library/ms178586.aspx將爲您提供有關如何完成此操作的良好概述。

0

問候大衛,

這種問題是很難通過網上問來解決,他們需要在現場進行檢查,所以我不會給你一個答案,只是一些提示:

  • 此應用程序是否使用驗證和授權?如果是這樣,認證cookie可能會在很長一段時間內應用程序處於非活動狀態後過期,並且如果您單擊「選擇」按鈕,您將被重定向到登錄頁面,但登錄頁面本身可能有問題,導致發生重定向循環,這會導致大多數瀏覽器在循環運行幾次後顯示「此頁面無法顯示」消息。循環可能是由其他因素引起的,所以我建議使用Fiddler跟蹤您的http交互性,您將知道服務器給出了什麼響應,以及瀏覽器顯示錯誤頁面的原因。
  • 附上提琴手,我建議以調試模式運行應用程序,並從visual studio菜單中選擇Debug> Exceptions,然後選中「Thrown」和「User unhandled」列中的所有框,這將導致調試器打破每一個例外,即使他們處理。
  • 最後一點是無關緊要的:我建議改變用戶從網格中選擇的方式。代替「選擇」鏈接按鈕,將鏈接放在其他頁面的url中,並將所選項目的id作爲url參數傳遞。這將節省往返服務器的時間,以及小型會話存儲開銷。在其他頁面中,您必須注意別人不會使用url參數來操作他沒有操作權限的數據。