格式化要显示的ajax.actionlink文本

时间:2014-12-18 22:16:44

标签: c# ajax asp.net-mvc

我的模型中有一个十进制数据类型和一个注释来格式化它,所以它在3位数之后添加逗号:

[DisplayFormat(DataFormatString = "{0:#,###0.00}" + " (USD)")]
public decimal PaidAmount { get; set; }

当我有任何DisplayFor(m => m.PaidAmount)格式正确显示(1,200.00美元)。但是,在Ajax.ActionLink中,第一个参数采用字符串来显示文本,因此我无法使用lambda表达式(m => m.PaidAmount)。当我这样做时:

Ajax.ActionLink(Model.PaidAmount.ToString(), //rest of link params)

格式化不适用于链接文本,它只显示一堆没有逗号的数字(1200.00美元,请注意1之后没有逗号)

我的猜测是,使用大写版本的M&#odel版本的模型会丢失其注释属性,有没有办法解决这个问题并将格式应用于ajax.actionlink?

2 个答案:

答案 0 :(得分:3)

您可以使用

@Ajax.ActionLink(string.Format("{0:#,##0.00 USD}", Model.PaidAmount), ...)

注意我认为您的意思是0:#,##0.00而非0:#,###0.00(即10,200.00美元,而不是1,0200.00美元)

答案 1 :(得分:2)

数据注释在这种情况下不起作用,因为它们在HtmlHelpers中被检查并且不会影响常规ToString

您可以创建一种扩展方法来格式化您的号码并在您的视图中调用它:

public static class Extensions
{    
   public static string ToCurrency(this decimal number)
   {
       return number.ToString("{0:#,###0.00}") + " (USD)";
   }
}

在您查看:(不要忘记直接在视图中或在views文件夹下的web.config中引用Extensions类)

Ajax.ActionLink(Model.PaidAmount.ToCurrency(), //rest of link params)