【问题标题】:Is it poor form to use .ToString() or another method inside of Razor?在 Razor 中使用 .ToString() 或其他方法是不是很糟糕?
【发布时间】:2020-06-07 15:58:53
【问题描述】:

我在视图中使用 .ToString() 来输出货币格式。我应该在渲染视图之前将值转换为字符串吗?另外,为什么下面的第二个 h3 标签没有像第一个那样创建货币字符串?

前:

<h3>Healthcare Cost Per Paycheck: @Model.TotalCostPerPaycheck.ToString("C")</h3>

<h3>Net Pay for @Model.FirstName @Model.LastName: @(Model.Salary - Model.TotalCostPerYear).ToString("C") </h3>

输出:

每张工资的医疗保健费用:71.16 美元

阿尔伯特·威尔逊的净工资:50150.ToString("C")

【问题讨论】:

  • 尝试另一对括号@((Model.Salary - Model.TotalCostPerYear).ToString("C"))
  • 至于你问题的第一部分,对于stackoverflow来说它可能过于基于意见,但我认为你这样做的方式没有任何问题。我不是真正的前端人员,但是像格式化对象以显示给用户这样的事情绝对应该在 UI 层中处理。
  • 我想说像这里这样非常琐碎的对象操作/格式化在视图中很好。这样你的视图模型就可以看起来更合理,并且可能可重用
  • 在 razor 视图中使用 ToString() 如果原始字符串为空可能会导致异常,因此请始终使用 string.IsNullOrEmpty 方法检查 nullempty,然后访问您的属性和使用ToString()

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


【解决方案1】:

你可以试试-

<h3>
   Healthcare Cost Per Paycheck: @(Model.TotalCostPerPaycheck.ToString("C"))
</h3>

<h3>
    Net Pay for @Model.FirstName @Model.LastName: @((Model.Salary - Model.TotalCostPerYear).ToString("C")) 
</h3>

有关 Razor 语法的快速参考,您可以查看 this 文章。

【讨论】:

  • 额外的括号做到了。感谢大家。我也同意将 NetPay 放入我的模型中。
【解决方案2】:

不,这不是一个糟糕的形式。如果你问我,这有点基于意见。我认为你应该做的是让你的视图代码对其他将加入你的项目的人也可读。

例如,我建议您创建一个名为 NetPay 的新属性或类似的东西,您将在其中计算后端(或定义您的业务逻辑)中的值并在您的视图中使用它而不是在视图中创建您自己的计算。

您只需调用该属性,每个人都会理解您认为该部分的含义。此外,每当您的逻辑必须更改时,您只需要更改后端中的部分,而不是在跨多个视图多次使用此逻辑时。美化就是这样,你可以创建一个后备逻辑,以防你的值(不确定这是否可能,因为我看不到你的模型)为空。

希望这是有道理的,祝你好运!

【讨论】:

    猜你喜欢
    • 2011-09-20
    • 2011-10-06
    • 2014-05-27
    • 1970-01-01
    • 2010-12-09
    • 2010-12-16
    • 1970-01-01
    • 2018-01-20
    • 2012-01-11
    相关资源
    最近更新 更多