Thd*_*hdK 9 model-view-controller asp.net-mvc mvc-editor-templates asp.net-mvc-templates
我发现这篇关于MVC的Display和EditorTemplates的帖子:
http://www.growingwiththeweb.com/2012/12/aspnet-mvc-display-and-editor-templates.html
它创建一个显示模板,以便轻松显示使用货币符号格式化的十进制.
示例中使用的模型:
public class TestModel
{
public decimal Money { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
显示模板:
查看/共享/ DisplayTemplates/decimal.cshtml:
@model decimal
@{
IFormatProvider formatProvider =
new System.Globalization.CultureInfo("en-US");
<span class="currency">@Model.ToString("C", formatProvider)</span>
}
Run Code Online (Sandbox Code Playgroud)
在我的网站上,我有一个帮助类,其中有一个方法可以从小数中检索格式化的货币字符串,所以我会用以下内容替换上面的内容:
@model decimal
@(MyHelperClass.GetCurrencyString(Model))
Run Code Online (Sandbox Code Playgroud)
最后我们想要查看格式化货币的视图:
@model TestModel
@Html.DisplayFor(e => e.Money)
Run Code Online (Sandbox Code Playgroud)
输出:
<span class="currency">$3.50</span>
Run Code Online (Sandbox Code Playgroud)
我可以毫无问题地实现这一点.但当然我有不同的观点,我想查看格式化的货币.但在某些情况下,我不想显示货币符号.
我现在的问题是我应该如何实现这个小变化而不会过多的代码.
这是我目前的实施:
我已将显示模板更改为:
@model decimal
@{
bool woCurrency = (bool)ViewData["woCurrency"];
}
@(MyHelperClass.GetCurrencyString(Model)Model,woCurrency))
Run Code Online (Sandbox Code Playgroud)
当然我也改为GetCurrencyString方法来接受这个附加属性.
在我看来,我现在也必须提供这个属性:
@Html.DisplayFor(m => m.Money, new { woCurrency = true })
Run Code Online (Sandbox Code Playgroud)
所以实际上我所做的一切都应该有效.但不知何故,我不喜欢这种使视图更复杂的解决方案.
我的问题:有没有其他方法可以实现这样的东西?或者有什么建议可以优化我目前的溶出度?
谢谢!
Hus*_*vic 18
您需要将DisplayFormat属性应用于您的Money属性.例如:
[DisplayFormat(DataFormatString = "{0:C}")]
public decimal Money { get; set; }
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看以下两个链接:
HtmlHelper
自动检查ViewData["woCurrency"]
并输出正确的结果怎么样?
public static string Currency(this HtmlHelper helper, decimal data, string locale = "en-US", bool woCurrency = false)
{
var culture = new System.Globalization.CultureInfo(locale);
if (woCurrency || (helper.ViewData["woCurrency"] != null && (bool)helper.ViewData["woCurrency"]))
return data.ToString(culture);
return data.ToString("C", culture);
}
Run Code Online (Sandbox Code Playgroud)
然后:
@Html.Currency(Model.Money);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19478 次 |
最近记录: |