如何验证文本框只在asp.net c#中输入几个选项​​?

时间:2014-02-07 14:55:24

标签: c# asp.net regex validation textbox

在我的数据库中,我有一个包含货币代码的表格,如:

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

在我的asp.net应用程序中,我有一个文本框供用户输入货币。

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

如何强制用户只输入我在数据库中的选项?

3 个答案:

答案 0 :(得分: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数据提供自动完成功能

我认为这比自由文本文本框上的简单验证更加用户友好。 最后,您可以使用regex进行一些验证(在客户端和服务器端)。 您也可以通过正则表达式HTML5 validation

进行HTML5验证

或者只使用内置的asp.net验证器,它会自动处理客户端和服务器端验证。 ASP.Net Validators

答案 1 :(得分: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自动完成功能会更合适。

答案 2 :(得分:0)

嗯,你可以做的是使用自动填充选项,一旦你有了货币类型,你就可以有选择地消耗与所输入货币不匹配的击键。

例如,如果用户输入U并尝试输入类似M的内容(假设没有货币以UM开头),则按键M可以被消费,只有当用户试图键入S时才允许(因为,数据库中有一些叫做“USD”的东西)。

第二个选项类似于select2