2016-09-09 32 views
0

我已經創建了一個aspx表單的鏈接按鈕,它檢查登錄電子郵件地址的可用性,其功能如下。在保存按鈕上執行檢查可用性功能

protected void lnkCheckAvailable_Click(object sender, EventArgs e) 
    { 
     SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser); 
     ds = new DataSet(); 
     bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text); 

     if (ds.Tables[0].Rows.Count > 0) 
     { 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>"; 
     } 
     else 
     { 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>"; 
     } 
    } 

當用戶點擊檢查可用性鏈接按鈕時它工作正常。還有另一個按鈕「保存」,它將用戶信息保存在表格中。現在我的問題是,如果它顯示「此用戶名已被其他用戶使用」。消息的信息仍然保存在數據庫中。請告訴我如何防止這個!

+0

爲什麼你有這兩個單獨的行動?當您執行「檢查可用性」檢查時,用戶名*可能*可用,但在您「保存」時可能已被*其他人*佔用。我想不出先運行單獨檢查的好處。 –

+0

只需在If塊中禁用保存按鈕即可。 如果您想在保存時間內檢查用戶登錄電子郵件,As @Demien_The_Undeliever說,您可以在保存操作中進行檢查並發現錯誤。 –

回答

1

根據用戶名是否存在於數據庫中,您可以返回truefalse。您可以創建一個方法來檢查用戶的可用性。

當用戶按下保存按鈕,你將調用該方法,如果方法返回true這意味着用戶存在。

private bool CheckUserAvailability() 
{ 
     SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser); 
     ds = new DataSet(); 
     bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text); 

     if (ds.Tables[0].Rows.Count > 0) 
     { 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>"; 
      return true; 
      } 
      else 
      { 
       valDuplicatePassword.Visible = true; 
       valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>"; 
       return false; 
      } 
} 

您也可以通過點擊link來調用此方法。

protected void lnkCheckAvailable_Click(object sender, EventArgs e) 
{ 
    CheckUserAvailability(); 
} 

你會呼籲Save按鈕這種方法,如果用戶不超過保存信息數據庫中。

protected void Savebtn_Click(object sender, EventArgs e) 
{ 
    if(CheckUserAvailability() == false) 
    { 
    SaveUserInfoToDataBase(); 
    } 
} 
+0

正如我所說的,所有這些預檢都毫無意義,如果有可能兩個用戶都試圖同時運行這些代碼。例如。兩個用戶都檢查可用性 - 是的,它是可用的。兩個用戶按下「保存」。該代碼爲兩個用戶運行並確定用戶名可用,然後*然後*按下並插入兩個用戶。你*有*檢查'INSERT'的實際點到數據庫中(而且,更好的辦法是防止重複的唯一約束),然後大多數預檢將變得毫無意義。 –

+0

@Damien_The_Unbeliever是的,我完全同意你的看法,但這個答案在OP的背景下。你已經指出了評論,你也可以編輯答案,如果你喜歡。 – Mairaj