【问题标题】:Dynamic currency in MVC 5 from database来自数据库的 MVC 5 中的动态货币
【发布时间】:2018-04-03 05:51:09
【问题描述】:

我当前存储特定供应商货币的模型如下所示,其中 VendorCurrency 值将类似于“en-US”或“en-CA”等。

目前我正在使用 Web.Config 中的标签,该标签在全球范围内设置默认货币,但已经出现了使网站多币种的要求。

是否有一种简单的方法可以使用该模型来确定在视图中即时使用哪种货币?

供应商:

public string VendorID { get; set; }

[Required]
[StringLength(100)]
[Display(Name = "Vendor Name")]
public string VendorName { get; set; }

[StringLength(50)]
public string VendorCurrency { get; set; }

发票:

public string Invoice_Number { get; set; }

public int VendorID {get;set;}

[DataType(DataType.Currency)]
public decimal? Invoice_Amount { get; set; }

【问题讨论】:

  • 您是否希望仅显示此值,或者您是否还想编辑用户文化中的值(在这种情况下,您需要自定义 ModelBinder 并且需要配置 @ 987654323@ 如果您还需要客户端验证)
  • 这仅用于显示。用户将无法编辑。
  • 如果是这种情况,一种解决方案是拥有一个(比如说)string CurrencyFormat 属性,您可以根据用户文化在 GET 方法中设置该属性 - 例如它可能是 "$# .00" 代表en-US,然后在视图中使用@Model.Invoice_Amount.ToString(Model.CurrencyFormat)
  • 谢谢!我将您的答案和 Cory 下面的答案结合起来,创建了一个扩展方法来确定检测到的文化。

标签: c# asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

在返回视图之前,您需要在控制器中设置Thread.CurrentThread.CurrentCulture

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-Us");

严重警告:

此设置将持续您的视图执行和操作执行。它将渗入未来的行动执行中。

此外,许多编码人员在解析/打印数字时没有正确指定文化,如果您有这样的代码,像这样设置 CurrentCulture 会巧妙地对其造成严重破坏。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2016-04-20
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多