【问题标题】:Converting/parsing query results to string .NET Core将查询结果转换/解析为字符串 .NET Core
【发布时间】:2019-06-05 07:42:15
【问题描述】:

我正在使用 ASP.NET Core 2.2。我想将从数据库中获取的数据转换为字符串。 这是我的 Dish 模型

public class Dish
 {
     public int DishID { get; set; }
     public decimal? DishPrice { get; set; }
 }

这是MyController

public class MyController : Controller
{
    public IActionResult MyView() 
    {
         var Dishes = _context.Dish.OrderBy(d =>d.DishID).ToList();
         return View(Dishes)
    }
}

最后是 MyView

@model Dish
  foreach(var a in Model)
  {
     <h1> @a.DishPrice </h1>
  }

问题是当我检查 DishPrice 数据类型时,它是十进制的。我希望控制器传递给视图的所有数据都是字符串。

【问题讨论】:

  • 为什么你需要它成为一个字符串?如果你真的需要的话,你可以把它转换成另一个模型,把它们作为字符串,但是为什么视图不能把它们转换成需要的呢?
  • 因为如果管理员添加了一个像 002300 这样的数字的 DishPrice,十进制和整数将删除 2300 之前的零。所以 MyView 显示 2300 而不是 002300。如果我在模型中注册它使用字符串类型不可能对其进行数学运算
  • 为什么前面的零对价格很重要?如果它始终是多个数字,您可以将其格式化。或者你必须以两种形式保存它。
  • 创建一个适合您需要的 ViewModel,并在加载数据后从您的 DB-Model 转换为您的 ViewModel。然后事情就完成了,你可以在你的 ViewModel 中进行你需要的每一次转换。这样做你也将你的数据库层与你的视图层分开。目前你正在混合东西。
  • @ArianShahalami 我怀疑您需要澄清要求。数字中的前导零无关。如果您想以某种方式显示数字,请使用String.FormatToString() 并在视图本身中指定您想要的格式。没有理由将DishPrice 更改为字符串

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


【解决方案1】:

您可以在迭代之前转换 @Model。看来你的模型应该是IQueryable&lt;Dish&gt;

@model IQueryable foreach(Model.Select(d => new {DishId = d.DishID, DishPrice = String.Format("{0:00000.00}",d.DishPrice)})) {

@a.DishPrice

}

按照@Panagiotis Kanavos的建议,上面的代码可以写成:

@a.DishPrice?.ToString("00000.00")

虽然这是可能的,但我相信添加 [DisplayFormat(DataFormatString = "{0:00000.00}")] 是最简单的方法:

public class Dish
{
    public int DishID { get; set; }

    [DisplayFormat(DataFormatString = "{0:00000.00}")]
    public decimal? DishPrice { get; set; }
}

【讨论】:

  • OP 可以直接调用String.Format()ToString(),而不是创建新对象,例如@a.DishPrice?.ToString("00000.00")
  • @PanagiotisKanavos 你的建议比我的要有效得多。我会更新我的答案。非常感谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-11
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 2011-07-20
  • 2018-11-29
相关资源
最近更新 更多