Как проверить текстовое поле Введите только несколько параметров в asp.net с#?


В моей базе данных есть таблица с кодами валют, например:

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

В моем asp.net приложение у меня есть текстовое поле для ввода валюты пользователем.

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

Как заставить пользователя вводить только те параметры, которые есть у меня в БД?

3   2  

3 ответа:

При необходимости можно использовать элемент управления валидатором регулярных выражений:

<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)));

Но из опыта пользовательского интерфейса я чувствую, что выпадающее меню или автозаполнение пользовательского интерфейса, как предлагали другие, было бы лучше.

Вы можете легко реализовать Поле автозаполнения.

Вот пошаговое руководство: создание простого текстового поля автозаполнения

<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 также, если вы хотите сделать это на стороне клиента, но если вы хотите получить данные из БД, вы должны создать метод webservice или обработчик для подачи автозаполнения с данными json.

Я думаю, что это более удобный для пользователя, чем простая проверка на свободном текстовом поле. В конце вы можете использовать некоторую проверку регулярным выражением (на стороне клиента, а также сервера). Вы можете пойти с проверкой HTML5 также через регулярное выражение: проверка HTML5

Или просто использовать встроенный asp.net валидаторы, он обрабатывает проверку на стороне клиента и сервера автоматически. ASP.Net Валидаторы

Ну, что вы можете сделать, так это использовать опцию автозаполнения, и как только у вас есть типы валют, вы можете выборочно использовать нажатия клавиш, которые не соответствуют набираемой валюте.

Например, если пользователь набрал U и пытается ввести что-то вроде M(предполагая, что никакие валюты не начинаются с UM), то нажатие клавиши M может быть использовано, и только тогда, если пользователь пытается ввести S, он должен разрешить (поскольку в базе данных есть что-то под названием "USD").

Вторым вариантом будет что-то вроде select2