【问题标题】:How to handle a unit conversion property in ASP.Net Core MVC model?如何处理 ASP.Net Core MVC 模型中的单位转换属性?
【发布时间】:2018-11-27 19:27:00
【问题描述】:

假设你有一个这样的模型属性:

[Display(Name = "Length (ft)"]
public double LengthFt {get; set;}

现在您需要另一个长度以米为单位的属性,用于输入和输出表单:

[Display(Name = "Length (m)"]
[NotMapped]
public double LengthMeters
{
    get => LengthFt * 0.3048;
    set => LengthFt = value / 0.2048;
}

这应该有效吗?我的(比这更复杂的例子)正在处理“get”部分(在设置 LengthFt 时正确返回 LengthMeters),并且正在处理 Create 表单(来自 ASP.Net Core MVC 的标准 Create 视图),但是不适用于编辑。 Edit 表单显示正确的初始值,但是当我覆盖它并单击“Save”时,两个字段现在都是 0。这就像 Edit 没有看到 NotMapped 元素的更改,但 Create 操作看到了。

有没有更优雅的方式来处理这些类型的转换?

【问题讨论】:

  • 您确定绑定到 LengthMeters 的模型确实有效吗?您可以发布您的视图模型和控制器操作方法代码。看起来从编辑表单设置的值始终为零。但我不明白为什么你只需要设置 LengthFt 来计算 LengthMeters 时还要设置 LengthMeters。
  • 我们有一个完整的计算库,可以接受以 SCFH(标准立方英尺/小时)为单位的值,而客户决定他们总是希望以 MCFH(每小时千立方英尺)的形式输入并查看结果)。所以它只是一个除/乘一千,但在代码方面,将所有其他模型引用(和数据库条目)留在 SCFH 中但在 UI 级别进行翻译更容易。但是编辑的约束性问题让我怀疑我的推理是否存在缺陷。

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0 asp.net-core-mvc-2.0


【解决方案1】:

控制器中 Edit 方法的 Bind 命令中省略了“LengthMeters”。正确绑定后,这种技术似乎可以正常工作。

仍然想知道是否有更优雅的方式来做到这一点,但它似乎现在可以工作了。

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    相关资源
    最近更新 更多