я нашел этот пост про дисплей и EditorTemplates для MVC:Форматирование валюты с использованием шаблона отображения в MVC
http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html
Это создает шаблон дисплея легко отображать десятичную отформатированный знак валюты.
модель, используемая в данном примере:
public class TestModel
{
public decimal Money { get; set; }
}
Шаблон отображения:
Views/Shared/DisplayTemplates/decimal.cshtml:
@model decimal
@{
IFormatProvider formatProvider =
new System.Globalization.CultureInfo("en-US");
<span class="currency">@Model.ToString("C", formatProvider)</span>
}
В моем сайте у меня есть помощник класс с методом для извлечения форматированной строки валюты из десятичной дроби, поэтому я бы заменил выше:
@model decimal
@(MyHelperClass.GetCurrencyString(Model))
И, наконец, вид, где мы хотим видеть отформатированный валюту:
@model TestModel
@Html.DisplayFor(e => e.Money)
Выход:
<span class="currency">$3.50</span>
я могу осуществить это без каких-либо проблем. Но, конечно, у меня разные взгляды, где я хочу просмотреть форматированную валюту. Но в некоторых случаях я не хочу показывать знак валюты.
Мой вопрос теперь в том, как я должен реализовать это небольшое изменение, не переполняя код.
Вот моя текущая реализация:
Я изменил мой шаблон отображения этого:
@model decimal
@{
bool woCurrency = (bool)ViewData["woCurrency"];
}
@(MyHelperClass.GetCurrencyString(Model)Model,woCurrency))
Конечно я также изменен метод GetCurrencyString принять этот дополнительный атрибут.
На мой взгляд, я теперь должен обеспечить этот атрибут тоже:
@Html.DisplayFor(m => m.Money, new { woCurrency = true })
Так на самом деле я все работает, как он должен работать. Но почему-то мне не нравится это решение, которое делает представление более сложным.
Мой вопрос к вам: есть ли какой-либо другой способ реализовать что-то подобное? Или какие-либо советы по оптимизации моего текущего разрешения?
Спасибо!
Спасибо за предложение. Означает ли это, что мне всегда нужно установить свойство в viewdata в представлении? Поскольку у меня есть несколько цен, которые я хочу показать в одном представлении, но не все из них должны показывать знак валюты. Когда я начал читать о шаблонах отображения, я думал, что они сделают все намного проще и чище, но похоже, что они меня обманули :( – ThdK
Вы также можете установить 'ViewData' в' controller'. – haim770
Да, я знаю, но тогда это будет иметь то же значение для каждой валюты, которую я хочу отформатировать в текущем виде.У меня есть viewmodel, представляющий строку в корзине.Один из свойств является десятичной Цена. Для большинства строк я не хочу, чтобы знак валюты, для промежуточные и итоговые строки, я хочу показать знак валюты. Однако обе строки используют один и тот же объект (viewmodel) для хранения своих значений. – ThdK