2014-12-18 150 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)