首页 > 解决方案 > 正确键入时的十进制数字验证错误

问题描述

让我先向您介绍一些细节。我正在使用带有实体框架的 ASP.NET Core Razor Pages 构建一个 Web 应用程序,主要用于数据库。

我有一个 Product 类,其属性名为 Price。

目前看起来是这样的。

    [Required]
    [Column(TypeName = "decimal(18,2)")]
    public decimal Price { get; set; }

这就是 Web 表单的外观。

    <div class="form-group">
        <label asp-for="Product.Price"></label>
        <input asp-for="Product.Price" class="form-control" />
        <span class="text-danger" asp-validation-for="Product.Price"></span>
    </div>

所以我有两个主要问题。

  1. 我只能将价格设置为整数。- 否则我得到一个服务器端验证错误。

例子:

我将价格设置为 33.33(应该是正确的)。我正在发送一个帖子请求。并且出现错误“值 '33.33' 对价格无效。”

2.当我设置价格时(只能传递一个整数值rn),价格被保存在数据库中。(这一切都应该如此,但让我进一步解释)

例子:

我将价格设置为 33。价格在数据库中保存为 33,00。

问题:

现在,当我从数据库中取回价格时,显示为 33,00。以 Web 形式呈现,其中客户端验证和服务器端验证不允许该值。

简而言之 - 客户端和服务器端不允许价格看起来像那样 - 33,33。服务器端不允许价格看起来像那样 - 33.33。我只能将整数值作为成功验证的价格传递。保存在数据库中的价格看起来像33,00,这在以后客户端和服务器端验证方面会出现问题。

对于客户端验证我使用下面的代码。实际上不知道它是如何工作的。

<script src="~/lib/jquery/dist/jquery.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>

标签: c#asp.netentity-framework

解决方案


您需要在演示端查看数据时使用 System.Globalization.CultureInfo.CurrentCulture 并使用 System.Globalization.CultureInfo.InvariantCulture 在内部使用数据并存储在数据库中。

从数据库存储和获取的值必须只是字符串,您可能会将其转换为 double ,在转换过程中您需要使用cultureinfo


推荐阅读