2013-11-01 49 views
1

EventHandler中的preserveForm爲true的服務器傳輸會拒絕該事件處理程序並導致無限循環。 我的問題:我如何在處理程序中指出事件已被處理。 PS:我知道我們可以將preserveForm設置爲false,但我不想這樣做。在EventHandler中使用preserveForm true的服務器傳輸會拒絕該事件處理程序

示例代碼:

protected void rbThemes_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    Server.Transfer(Request.FilePath, true); 
} 

回答

0

,我要面對現在大的問題。我也不知道答案,我會想象一個人會修改Request.Form數據來刪除事件,但我不知道如何幹淨地做到這一點。

作爲一種解決方法,我在Context.Items中使用了一個警戒標誌,它也被保留下來。

protected void rbThemes_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (IsSecondPass()) return; 
    Server.Transfer(Request.FilePath, true); 
} 

private bool IsSecondPass() 
{ 
    const string key = "SECOND_PASS_GUARD"; 
    if (Context.Items[key] == null) 
    { 
     Context.Items[key] = new object(); 
     return false; 
    } 
    else 
    { 
     Context.Items.Remove(key); 
     return true; 
    } 
} 

我不會推薦這個,但它的工作原理。 (方法的名字也很差選擇,因爲它的副作用。)

也有一個較短的方式:

protected void rbThemes_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (PreviousPage != null) return; 
    Server.Transfer(Request.FilePath, true); 
} 

要注意的是它不具有任何不想要的效果,如果你做其他類型的交叉頁面發佈(儘管我不知道爲什麼或如何從另一個頁面發佈SelectedIndexChanged事件)。仍然不推薦。

注意:如果要編寫母版頁,則需要在母版頁類(Page.PreviousPage)上的Page屬性中引用PreviousPage

相關問題