2012-03-16 33 views
0

我有一個表單來編輯員工信息。如果用戶希望爲選定的員工輸入新的電子郵件地址,則會顯示一個文本框和一個表示「添加電子郵件地址」的按鈕。非常簡單,您輸入電子郵件地址,單擊添加電子郵件地址。它回發並且該按鈕的事件處理程序對數據庫執行INSERT。回發後刷新導致再次發送相同的數據


問題: 如果按F5即回發後刷新頁面,它會導致發生,即使文本框爲空同回發。換句話說,每次你點擊F5時,該添加電子郵件地址按鈕的事件處理程序中的操作都會再次出現。如果我點擊F5十次,那麼同一個電子郵件地址會在數據庫中顯示十次。


我發現的一個建議是「在應用更改後重新指向同一頁面」。這在我們的案例中不理想的原因是它是一種相當冗長的員工數據形式---如果用戶對整個表格(如FirstName,LastName等)進行了一系列更改,在其他地方應用更改之前添加郵件,如果我們重新定向到同一頁面,其他地方的更改將會丟失。

我能想到的非常漫長的解決方案是,捕獲ViewState中的所有數據,通過重定向到同一頁面,然後在URL中使用查詢字符串來確定是否要填充來自ViewState的數據。在我走上這條路之前,我希望不是那樣,而是有一些我不知道的方法,像PostbackButDontRetainPostbackData()(我知道一廂情願的想法)。

回答

0

在該添加電子郵件地址按鈕的處理程序中,檢查電子郵件是否已存在於數據庫中。如果是,請不要再次添加電子郵件並向用戶顯示適當的消息。通常窗體有一個像這樣的隱藏div的保留區域,以防萬一發生錯誤,div會填充錯誤消息並顯示給用戶。

此外,它將有助於在用戶成功接收並處理其數據時向用戶顯示確認消息。

UPDATE

如果你不喜歡展現給用戶的任何消息,乾脆什麼也不做你發現後,該電子郵件地址已存在於數據庫中。例如:

public void AddEmailToDB(string email) 
{ 
    // first find out if the email already exists in the database 
    bool isDuplicate = ...; 
    // if it does, simply return and do nothing 
    if(isDuplicate) return; 

    // if control reaches here then the email is not 
    // a duplicate and you can do your normal processing 
} 

UPDATE II

如果你不希望瀏覽器顯示一個消息框,每次用戶回傳後按F5,你可以通過包裝你的電子郵件做使用AJAX部分回發文本框並在UpdatePanel中添加按鈕,它非常易於使用。

+0

我明白你的意思了,實際上我們會檢查電子郵件地址是否存在。這仍然會導致每次刷新的消息框不相關。我想要的是頁面刷新刷新頁面沒有以前的回發數據。 – CptSupermrkt 2012-03-16 06:30:22

+0

@CptSupermrkt,你是指瀏覽器顯示的消息框? – 2012-03-16 06:38:02

+0

@CptSupermrkt,請參閱最新的答案。 – 2012-03-16 06:41:37