Принудительно заставить текстовое поле ASP.NET отображать валюту со знаком $ - PullRequest
4 голосов
/ 14 октября 2008

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

Примеры:

10,23 становится $ 10,23
$ 1,45 остается $ 1,45
10.a выдает ошибку из-за неправильного числа

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

Ответы [ 6 ]

10 голосов
/ 14 октября 2008

ASP.NET MaskedEdit элемент управления из AJAX Control Toolkit может выполнить то, что вы просите.

5 голосов
/ 28 декабря 2009

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

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

// directive
using System.Globalization;

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

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

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

4 голосов
/ 14 октября 2008

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

2 голосов
/ 28 декабря 2009
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); }
1 голос
/ 03 ноября 2008
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); }
0 голосов
/ 14 октября 2008

В .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
}
...