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



>我的模型中有一个十进制数据类型和一个注释来格式化它,以便它在 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?

您可以使用

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

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

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

您可以创建一个分机方法来格式化您的号码并在您的视图中呼叫它:

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

在视图中:(不要忘记直接在视图中或在 web.config 中的视图文件夹下引用扩展类(

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

最新更新