2014-02-07 34 views
2

在我的數據庫我有像貨幣代碼表:如何驗證文本框只能在asp.net c#中輸入幾個選項​​?

USD 
GBP 
CAD 
AUD 
JPY 
EUR 
ISK 
PLZ 
TRL ... and more 

在我的asp.net應用程序,我對用戶輸入的貨幣文本框。

<asp:TextBox ID="txtCurrency" runat="server" Text="USD"></asp:TextBox> 

如何強制用戶只輸入我在我的數據庫中的選項?

+1

也許用下拉列表來代替? – Andrei

+0

或自動填充框 – speti43

+0

它可能對於下拉菜單太大而用戶想要在文本框中輸入... – Bryuk

回答

1

如果你必須你可以使用正則表達式驗證控件:

<asp:RegularExpressionValidator id="RegularExpressionValidator1" 
        ControlToValidate="txtCurrency" 
        ValidationExpression="^(USD|GBP|CAD|AUD|JPY|EUR|ISK|PLZ)$" 
        Display="Static" 
        EnableClientScript="false" 
        ErrorMessage="Enter a valid code" 
        runat="server"/> 

這將填充服務器端這樣的,但格式類似上面的正則表達式:

RegularExpressionValidator1.ValidationExpression = GetValuesFromDb(); 

這是你如何將值格式化爲正則表達式:

var cs = new List<string> {"USD", "GBP", "CAD", "AUD", "JPY", "EUR", "ISK", "PLZ"}; 
    var csRegex = "^({0})$"; 
    Console.Out.Write(string.Format(csRegex, string.Join("|", cs))); 

但是從UI體驗來看,我認爲像其他人所建議的下拉或UI自動完成更適合。

1

您可以輕鬆實現Autocomplete box

這裏是一個漫遊: Creating a Simple Auto-Complete TextBox

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"> 
</asp:ToolkitScriptManager> 

<asp:TextBox ID="txtCurrency" runat="server"></asp:TextBox> 

<asp:AutoCompleteExtender 
    ID="AutoCompleteExtender1" 
    TargetControlID="txtCurrency" 
    runat="server" /> 

並創建AutoCompleteExtender一個頁面方法(在漫遊描述)。

如果您想在客戶端進行設置,您也可以使用Jquery autocomplete,但是如果您想從數據庫中檢索數據,則必須創建一個web服務方法或處理程序來爲json數據提供自動填充。

我認爲這比用戶對自由文本文本框的簡單驗證更友好。 最後,您可以使用正則表達式進行驗證(在客戶端和服務器端)。 你可以用HTML5驗證去也可以通過正則表達式:HTML5 validation

或只使用內置在asp.net驗證,它會自動處理客戶端和服務器端驗證。 ASP.Net Validators

0

那麼,你可以做的是使用自動完成選項,一旦你有了貨幣類型,你就可以有選擇地使用與被輸入貨幣不匹配的按鍵。

像例如,如果用戶鍵入U,並試圖輸入類似M(假設沒有貨幣與UM開始),然後按鍵M可以消費,也只有這樣,如果用戶試圖鍵入S如果它允許(因爲在數據庫中有一些叫做「USD」的東西)。

第二個選擇是像select2