2009-12-30 96 views
0

我有一個登錄頁面,用戶輸入用戶名(文本框),密碼(文本框)和位置(下拉列表),然後登錄。如何設置默認下拉列表selecteditem

在服務器頁面上,對於位置dropdonwlist我有一個連接字符串來訪問SQL服務器數據庫,以獲取位置表中的所有位置並將數據綁定到下拉列表。

對於dropdownlist.SelectedItem,我想要做的是,一旦用戶輸入用戶名,onChange,特定用戶的默認位置應該是用戶單擊登錄之前的選定位置。此默認位置由登錄表中的locationID(FK)定義,其中loginId,username,password和locationID作爲其列。我想要在服務器端檢索locationID(訪問數據庫表)的過程,然後將locationID傳遞給客戶端,我可以調用該函數根據locationID選擇默認的下拉列表項。有什麼辦法來完成這個?由於

C#編程語言 數據庫SQL Server 2005

回答

2

有兩種方法可以完成這項工作:AJAX或Postback。 AJAX將是更好的方式,回發將是更簡單的方式,這取決於你真的...

這兩種方式將採取用戶名和運行查詢對數據庫獲取位置ID,然後從下拉列表中選擇它。

然而,從邏輯上講,這可能是一個安全漏洞(除非內部運行)黑客可以生成隨機用戶名,並查看他們是否返回有效位置,因爲不需要passwrod。這導致我質疑爲什麼你需要選擇一個位置,如果它已經在數據庫中了?您可以在驗證用戶時選擇它...

+0

「爲什麼你需要選擇一個位置,如果它已經在數據庫中了?」我們想跟蹤用戶的位置,通常他們會在默認位置,但有時他們正在旅行。稅率(例如稅)將根據他們現在的位置而改變。 – Akil 2009-12-30 17:14:57

+0

啊,我明白了。我仍然建議不要自動選擇位置。您可能需要添加一個「自動」選項,該選項應該是默認值,並且可以針對「漫遊」用戶進行更改。 – Ariel 2009-12-31 03:00:42

0

我可能會使用jQuery,與同時通過的onblur爲用戶名框引發的方法。此方法會在您的頁面上調用AJAX方法以從數據庫獲取默認位置ID。

根據您正在運行的.NET版本,您可以使用AjaxProASP.NET AJAX Toolkit公開方法。 (我發現AjaxPro更容易使用)。 (如果你暴露與AJAX工具包的方法在這裏非常粗糙的代碼,我大概得到了很多的東西錯了。)

function doSomething() 
    { 
     var username = $.("#textbox").val(); 

     $.ajax({ 
      type: "POST", 
      url: "default.aspx", 
      data: "username=" + username, 
      success: function(result){ 
       // Select the proper option here based on the result 
       $.("#dropdown").val(result); 
     } 
    }); 

} 

然後,它只是一個寫了jQuery的事AjaxPro有點不同,它會生成頁面JavaScript,您可以調用它來獲取結果。

+0

您的代碼需要編輯... var username = $。(「#textbox」)。val(); url缺少方法的名稱,數據需要是json對象(「 {'username':''+ username +''}「 我知道這只是一個示例,但爲什麼不把它作爲一個工作示例... :) – Ariel 2009-12-30 16:52:51

+0

如果它是一個簡單的帖子,它並不需要是一個JSON對象,但可以是查詢字符串。在將它查找到數據庫之前,您一定要在服務器端方法中清理它! – James 2009-12-30 17:29:17

0

這與「位置」關係更密切:用戶還是計算機?

如果是適當選擇一個默認位置爲計算機而不是用戶, 你可以考慮使用一個Cookie存儲的默認位置。一些優點:

  • 沒有JavaScript要求 - 下拉默認是由服務器選擇。
  • 單個請求 - cookie值包含在GET請求中。

這將是相對容易一些注意事項來實現:

  • 一個cookie可以被限制在客戶端計算機的(窗口)用戶帳戶。如果您在同一臺計算機上有兩個用戶(具有相同的用戶)並且位置不同,那麼這不是一個好的解決方案。
  • 有時瀏覽器會關閉cookie。