2014-12-18 3 views
2

У меня есть десятичный типа данных в моей модели и аннотация форматировать его, чтобы он добавляет запятые после 3-х цифр:форматирование Ajax.ActionLink текста для отображения

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

, когда у меня есть какие-либо DisplayFor(m => m.PaidAmount) непечатаемые отображается правильно (1,200.00 USD). Однако в Ajax.ActionLink первый аргумент принимает строку для отображения текста, поэтому я не могу использовать выражение лямбда (m => m.PaidAmount). Когда я делаю:

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

форматирование не применяется к тексту ссылки, он показывает только кучу цифр без запятых (1200.00 USD, обратите внимание, что нет запятой после 1)

моего предположения заключается в том, что использование модели M'odel в капитале теряет свои свойства аннотации, есть ли способ обойти это и применить форматирование к ajax.actionlink?

+0

Причина, по которой ActionLink не использует аннотацию данных, состоит в том, что она просто ожидает строку для ее текста. Он не ожидает, что вы примете модельное выражение. 'm => m.PaidAmount' предоставляет свойство' DisplayFor', чтобы оно могло извлекать аннотации метаданных/данных модели. 'ActionLink' не ожидает таких выражений, потому что вы часто не проходите proeprties, а вместо этого такие вещи, как' Ajax.ActionLink («Back to Home», ' – AaronLS

+1

Я знаю, что это не помогает, а просто для того, чтобы помочь вам понять различие между тем, почему один работает, а другой нет. – AaronLS

+0

спасибо за объяснение –

ответ

3

Вы можете использовать

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

Note Я думаю, вы имеете в виду 0:#,##0.00 не 0:#,###0.00 (т. 10 200,00 USD, не 1,0200.00 USD)

+0

да, вы правы –

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) 
Смежные вопросы