Принудительно ввести ASP.NET текстовое поле для отображения валюты со знаком $

StackOverflow https://stackoverflow.com/questions/202067

Вопрос

Есть ли способ заставить текстовое поле ASP.NET принимать только значения валют, а после проверки элемента управления предварительно вставить знак $?

Примеры:

10.23 становится $ 10.23
$ 1.45 остается $ 1.45
10. возникает ошибка из-за того, что неверный номер

У меня есть RegularExpressionValidator, который проверяет правильность номера, но я не знаю, как принудительно вставить знак $ в текст.Я подозреваю, что JavaScript может сработать, но мне было интересно, есть ли другой способ сделать это.

Это было полезно?

Решение

Тот Самый ASP.NET Маскированныйправить контроль со стороны Инструментарий управления AJAX может выполнить то, о чем вы просите.

Другие советы

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

Способ, которым я это делаю, - использовать jQuery плагин для форматирования валюты чтобы привязать пользовательский ввод на стороне клиента.Для анализа этих входных данных на стороне сервера требуется только:

// directive
using System.Globalization;

// code
decimal input = -1;
if (decimal.TryParse(txtUserInput.Text, NumberStyles.Currency, 
    CultureInfo.InvariantCulture, out input))
{
    parameter = input.ToString();
}

Единственным недостатком этого является то, что пользователь может отключить javascript, и в этом случае средство проверки регулярных выражений, запущенное на стороне сервера, будет работать как запасной вариант.Если элемент управления привязан к базе данных, все, что вам нужно сделать, это decimalValue.ToString("{0:c}") , как упоминалось другими, для отображения правильного форматирования валюты.

Самое классное в этом то, что если пользователь вводит текстовое поле и оно показывает $0.00 на стороне клиента оператор if на стороне сервера вернул бы значение false.Если ваше десятичное значение не обнуляется в базе данных, просто измените decimal input = -1 Для decimal input = 0 и у вас будет значение по умолчанию 0.

Другим способом сделать это может быть размещение знака доллара снаружи слева от текстового поля.Есть ли реальная необходимость иметь знак доллара внутри коробки или подойдет простая этикетка?

decimal sValue = decimal.Parse(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", sValue); }
else
{ string LableText = Convert.ToString(sValue); }
string sValue = Convert.ToString(txtboxValue.Text.Trim());
// Put Code to check whether the $ sign already exist or not.
//Try making a function returning boolean
//if Dollar sign not available do this
{ string LableText = string.Format("{0:c}", "sValue"); }
else
{ string LableText = Convert.ToString(sValue); }

В .CS вы могли бы сопоставить шаблон следующим образом,

string value = text_box_to_validate.Text;

string myPattern = @"^\$(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})|\d{1,3}(\.\d{2})|\.\d{2})$";
Regex r = new Regex(myPattern);
Match m = r.Match(value);

if (m.Success)
{
    //do something -- everything passed
}
else
{
    //did not match
    //could check if number is good, but is just missing $ in front
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top