强制 ASP.NET 文本框显示带有 $ 符号的货币

Posted

技术标签:

【中文标题】强制 ASP.NET 文本框显示带有 $ 符号的货币【英文标题】:Force ASP.NET textbox to display currency with $ sign 【发布时间】:2008-10-14 17:24:58 【问题描述】:

有没有办法让 ASP.NET 文本框只接受货币值,并且在验证控件时,预先插入 $ 符号?

例子:

10.23 变为 10.23 美元 1.45 美元保持 1.45 美元 10.a由于不是有效数字而引发错误

我有一个用于验证数字是否有效的 RegularExpressionValidator,但我不知道如何将 $ 符号强制输入文本。我怀疑 javascript 可能会工作,但想知道是否有其他方法可以做到这一点。

【问题讨论】:

我最终找到了一些 JavaScript 来做我想做的事。需要简化部署包,而 AJAX 工具包只是另一个依赖项。 【参考方案1】:

AJAX Control Toolkit 中的 ASP.NET MaskedEdit 控件可以完成您的要求。

【讨论】:

MaskedEdit 链接已损坏。【参考方案2】:

我知道答案已被接受,但我想为遇到相同问题并寻找多种解决方法的人提供另一种解决方案。

我这样做的方式是使用 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,则服务器端 if 语句将返回 false。如果您的十进制值在数据库中不可为空,只需将 decimal input = -1 更改为 decimal input = 0,您将获得默认值 0。

【讨论】:

没问题!这非常有用。【参考方案3】:

执行此操作的另一种方法可能是将美元符号放在文本框左侧的外部。是否真的需要在盒子内放置美元符号或一个简单的标签?

【讨论】:

没有真正的需要,不幸的是,我受制于销售和营销要求。我试图反对它,但被否决了。【参考方案4】:
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.Format("0:c", sValue) 是一个很好的解决方案,当您有时需要将值放置在标签中而有时将值放置在文本框中。【参考方案5】:
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); 

【讨论】:

【参考方案6】:

在 .CS 中,您可以按照以下方式进行模式匹配,

string value = text_box_to_validate.Text;

string myPattern = @"^\$(\d1,3,?(\d3,?)*\d3(\.\d0,2)|\d1,3(\.\d2)|\.\d2)$";
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

【讨论】:

已经在运行该正则表达式。我希望在输入值后将 $ 符号插入到文本框值中,最好没有回发。

以上是关于强制 ASP.NET 文本框显示带有 $ 符号的货币的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET 中,如果文本在“大于”和“小于”符号之间给出,则无法保存文本框

在 ASP.NET 中,如果文本在“大于”和“小于”符号之间给出,则无法保存文本框

在按钮单击文本框值是空的使用 asp.net mvc 显示警报?

ASP.NET TextBox 控件在后台带有标签文本

asp.net如何给密码文本框加上小眼睛

Asp.net 文本框并排显示