在我的数据库中,我有一个包含货币代码的表格,如:
USD
GBP
CAD
AUD
JPY
EUR
ISK
PLZ
TRL ... and more
在我的asp.net应用程序中,我有一个文本框供用户输入货币。
<asp:TextBox ID="txtCurrency" runat="server" Text="USD"></asp:TextBox>
如何强制用户只输入我在数据库中的选项?
答案 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