4

通貨値のみを受け入れるように ASP.NET テキストボックスを取得し、コントロールが検証されるときに $ 記号を事前に挿入する方法はありますか?

例:

10.23 は 10.23
ドルになり、1.45 ドルは 1.45 ドルのまま
10.a は有効な数値ではないためエラーを発生させます

数値が有効であることを確認する RegularExpressionValidator がありますが、テキストに $ 記号を強制する方法がわかりません。JavaScript が機能する可能性があると思われますが、これを行う別の方法があるかどうか疑問に思っていました。

4

6 に答える 6

10

AJAX コントロール ツールキットの ASP.NET MaskedEditコントロールは、求めていることを実現できます。

于 2008-10-14T17:30:23.883 に答える
5

回答が既に受け入れられていることは知っていますが、同じ問題を抱えていて複数の回避策を探している人のために、別の解決策を捨てたかったのです。

これを行う方法は、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 を返すことです。データベースで 10 進数の値を null にできない場合は、変更decimal input = -1するだけdecimal input = 0でデフォルト値が 0 になります。

于 2009-12-28T13:56:47.250 に答える
4

これを行う別の方法は、ドル記号をテキスト ボックスの左側に配置することです。箱の中にドル記号を入れる必要はありますか、それともシンプルなラベルで十分ですか?

于 2008-10-14T17:27:42.953 に答える
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); }
于 2009-12-28T05:58:29.650 に答える
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); }
于 2008-11-03T10:56:07.607 に答える
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
}
于 2008-10-14T17:45:53.337 に答える