gpt4 book ai didi

asp.net-mvc-3 - 是否可以为DataType为DataType.Currency的MVC3字段强制使用货币

转载 作者:行者123 更新时间:2023-12-03 21:43:03 27 4
gpt4 key购买 nike

我正在编写一个MVC3应用程序,该应用程序从数据库中读取大量货币数据。我的问题是这些金额全部使用不同的货币。

如果我像这样设置字段的类型:

[DataType(DataType.Currency)]
public Amount{ get; set;}

我得到了小数位和一个货币符号,看起来不错,但默认为用户的本地货币。美国用户看到 $423.29,而GB用户看到 £423.29。我可以通过在Web.config中使用 <globalization culture="{something}">覆盖货币,但这会全局设置所有货币字段。

标记字段以使其具有正确的小数位和货币符号的最简单方法是什么?

在理想的世界中,我希望能够执行以下操作(对于USD):
[DataType(DataType.Currency, culture="en-us")]
public Amount{ get; set; }

并且始终将其渲染为 $439.38,但是内置注释无法实现。

最佳答案

我这样做的方法是创建一个自定义属性,该属性扩展了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);

只要您的模型正确传递。

显然,您需要进行错误检查等。

关于asp.net-mvc-3 - 是否可以为DataType为DataType.Currency的MVC3字段强制使用货币,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12408530/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com