【问题标题】:Convert meters to kilometers and format the value in Viewmodel将米转换为公里并在 Viewmodel 中格式化值
【发布时间】:2015-03-09 00:22:20
【问题描述】:

我有视图模型:

public class PartnerSearchResultVM
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Latitude { get; set; }
    public string Longitude { get; set; }
    public double Distance { get; set; }
    public string Classification { get; set; }
}

我从数据库中得到的距离是这样的:2354,58764478263 m

我要介绍 2.35 公里

如何更改 Viewmodel 以在那里进行转换(如果它是最好的地方)

【问题讨论】:

  • 您的仪表中的, 是一个错误,还是您实际上是在切换区域设置以及距离转换?

标签: c# asp.net-mvc viewmodel


【解决方案1】:

我会为您的模型添加一个只读属性。

public double Kilometers { get { return this.Distance / 1000; } }

如果你想要一个格式化的字符串,我会创建第二个只读属性。

public string KilometerDisplay { 
    get { 
        return String.Format("{0:0.00}km", this.Kilometers); 
    } 
}

不过,根据您的用例,通用格式函数可能是合适的。也许作为一种扩展方法:

[Extension]
public string FormatDistance(this double distance) {
    return distance.FormatDistance("");
}

[Extension]
public string FormatDistance(this double distance, string unitString) {
    return return String.Format("{0:0.00}{1}", distance, unitString);
}
// for meters:   result.Distance.FormatDistance("m");
// for kilometers:  result.Kilometers.FormatDistance("km");

然后将一些 XML 文档添加到 Distance 属性中,说明它以米为单位。

【讨论】:

  • 我将使用字符串而不是双精度,并将 2.35km 作为字符串返回,因为 Distance 属性已经存储了确切的值,并且在这种情况下,OP 正在寻找格式化输出。但是模式很好!
  • 嗨@Dan 谢谢。您将如何将格式应用于 #.## ?
  • 你更喜欢 String.Format 还是 DataAnnotation?
  • 如果不熟悉您的项目,这很难回答。选择最适合您情况的技术。
  • @Dan-o 出于好奇,为什么要将ExtensionAttribute 添加到扩展方法中?该属性在 C# 中是多余的,因为编译器会自动修饰此类方法。 msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 2022-01-04
  • 2018-01-06
  • 2021-10-03
  • 2015-10-18
  • 2012-08-06
  • 2014-01-07
  • 2021-07-13
  • 2021-04-01
相关资源
最近更新 更多