2014-12-18 87 views
2

我在我的模型十进制数据类型和注解格式化它,所以它后3个位数增加逗号:格式化ajax.actionlink要显示的文本

[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?

+0

ActionLink不使用数据注释的原因是因为它只是期望字符串的文本。它不指望你传递一个模型表达式。 'm => m.PaidAmount'将该属性暴露给'DisplayFor',以便它可以检索模型元数据/数据注释。 'ActionLink'并不期望这些表达式,因为你通常不会传递prohrties,而是像'Ajax.ActionLink(“返回首页”,' – AaronLS 2014-12-18 22:34:18

+1

我知道这并没有帮助,但只是为了帮助你理解为什么一个人工作和一个人不工作的区别 – AaronLS 2014-12-18 22:35:48

+0

谢谢你的解释 – 2014-12-18 22:43:25

回答

3

您可以使用

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

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

+0

是的你是对的 – 2014-12-18 22:43:46

2

在这种情况下数据注释不起作用,因为它们在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)