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

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

Примеры:

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

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

3
Я закончил тем, что выяснил какой-то JavaScript, чтобы делать то, что я хотел. Необходимо упростить пакет развертывания, а набор инструментов AJAX - это еще одна зависимость.
добавлено автор Jason Z, источник

5 ответы

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

9
добавлено
Ссылка MaskedEdit нарушена.
добавлено автор Neil Knight, источник
Какой голос?
добавлено автор Neil Knight, источник
@NeilKnight - нисходящая линия для почти 5-летней неработающей ссылки? Это тяжело, не так ли? Ссылки фиксируются сейчас, но вы (кто-то, кто был в сообществе более 3 лет) могли бы помочь исправить неработающую ссылку.
добавлено автор Forgotten Semicolon, источник

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

Способ, которым я это делаю, - использовать 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.

5
добавлено
Конечно! Это очень полезно.
добавлено автор Jim Schubert, источник

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

4
добавлено
В этом нет никакой реальной необходимости, я несчастлив связан с требованиями к продажам и маркетингу. Я пробовал спорить с ним, но был отменен.
добавлено автор Jason Z, источник
Хорошее решение, которое думает за пределами коробки! Я не мог удержаться ...
добавлено автор Brian Hinchey, источник
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); }
2
добавлено
string.Format ("{0: c}", sValue) - прекрасное решение, когда вам нужно поместить значение в ярлык иногда и текстовое поле в другое время.
добавлено автор Tony L., источник

В .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
}
0
добавлено
Уже работает это регулярное выражение. Я хочу, чтобы знак $ был вставлен в значение текстового поля после ввода значения, предпочтительно без обратной передачи.
добавлено автор Jason Z, источник
DotNetRuChat
DotNetRuChat
2 992 участник(ов)

Чат русскоязычного .NET сообщества http://dotnet.ru/ Вам могут быть интересны: @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @xamarin_russia, @microsoftstackjobs, @uwp_ru Флуд в @dotnettalks

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

pro.net
pro.net
710 участник(ов)

Обсуждение .NET Framework и всего, что с ним связано. Правила: не флудить не по теме, уважать ваших коллег и никакой рекламы (объявления о вакансиях можно согласовать с @AlexFails). Флудилка: @dotnettalks Участник @proDOT

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

.NET Talks: Force Push Masters
.NET Talks: Force Push Masters
490 участник(ов)

Свободный чат .NET разработчиков. Правила: t.me/dotnettalks/56823 Вам могут быть интересны: @dotnetruchat, @dotnetchat, @cilchat, @fsharp_chat, @pro_net, @dotnetgroup, @xamarin_russia, @microsoftstackjobs, @uwp_ru http://combot.org/chat/-1001128250813

.NET Chat Убежище
.NET Chat Убежище
246 участник(ов)

Чат .NET разработчиков под эгидой MSK/SPB .NET Community Group Вам могут быть интересны: @fsharp_chat, @dotnetruchat, @cilchat, @xamarin_russia, @microsoftstackjobs, @dotnetgroup Флуд в @dotnettalks

.NET CIL Chat
.NET CIL Chat
54 участник(ов)

.NET CIL (aka IL aka MSIL)