我这样做的方法是创建一个扩展DataType
属性的自定义属性和一个自定义 html 助手。这不一定是最简单的方法,但将来会节省时间。
编辑
合并CultureInfo.CreateSpecificCulture(cultureName)
而不是switch
自定义属性
public class CurrencyDisplayAttribute : DataTypeAttribute
{
public string Culture { get; set; }
public CurrencyDisplayAttribute(string culture)
: base(DataType.Currency)
{
Culture = culture;
}
}
html 助手
public static class Helpers
{
public static IHtmlString CurrencyDisplayFor<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
{
double value = double.Parse(expression.Compile().Invoke(helper.ViewData.Model).ToString());
var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
var prop = typeof (TModel).GetProperty(metadata.PropertyName);
var attribute = prop.GetCustomAttribute(typeof (CurrencyDisplayAttribute)) as CurrencyDisplayAttribute;
// this should be whatever html element you want to create
TagBuilder tagBuilder = new TagBuilder("span");
tagBuilder.SetInnerText(value.ToString("c", CultureInfo.CreateSpecificCulture(attribute.Culture));
return MvcHtmlString.Create(tagBuilder.ToString());
}
}
您可以在模型中使用该属性
[CurrencyDisplay("en-us")]
public double Amount { get; set; }
然后在您看来,您可以通过
@Html.CurrencyDisplayFor(x => x.Amount);
只要您的模型正确传递。
显然,您需要进行错误检查等。