2008-10-14 2 views
3

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

Примеры:

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

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

+1

Я закончил тем, что выяснил, какой JavaScript я сделал. Необходимо упростить пакет развертывания, а набор инструментов AJAX - это еще одна зависимость. – 2008-10-14 19:41:53

ответ

9

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

+1

Ссылка MaskedEdit не работает. – 2013-06-19 12:23:42

+0

@NeilKnight - нисходящая линия для почти 5-летней неработающей ссылки? Это тяжело, не так ли? Ссылки фиксируются сейчас, но вы (кто-то, кто был в сообществе более 3 лет) могли бы помочь исправить неработающую ссылку. – 2013-06-19 14:32:52

+0

Какой голос? – 2013-06-19 15:15:16

4

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

+2

В этом нет никакой реальной необходимости, я несчастливо привязан к требованиям к продажам и маркетингу. Я пробовал спорить с ним, но был отменен. – 2008-10-14 17:29:14

+2

Хорошее решение, которое думает за пределами коробки! Я не мог устоять ... – 2012-07-02 05:56:52

0

В .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 
} 
1
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); } 
2
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); } 
5

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

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

// 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, оператор на стороне сервера возвращает false. Если ваше десятичное значение не является нулевым в базе данных, просто измените decimal input = -1 на decimal input = 0, и у вас будет значение по умолчанию 0.

Смежные вопросы