c# - 正确键入时的十进制数字验证错误
问题描述
让我先向您介绍一些细节。我正在使用带有实体框架的 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>
所以我有两个主要问题。
- 我只能将价格设置为整数。- 否则我得到一个服务器端验证错误。
例子:
我将价格设置为 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>
解决方案
您需要在演示端查看数据时使用 System.Globalization.CultureInfo.CurrentCulture 并使用 System.Globalization.CultureInfo.InvariantCulture 在内部使用数据并存储在数据库中。
从数据库存储和获取的值必须只是字符串,您可能会将其转换为 double ,在转换过程中您需要使用cultureinfo
推荐阅读
- sql - 如何在 Postgres 中将布尔数组转换为单个布尔值或单个字符串
- regex - 如何修复正则表达式 url 模式
- amazon-web-services - 通过 API-Gateway 将动态路径传递给 AWS-Lambda
- javascript - 如何过滤表中仅更改的行的记录并使用角度表和 C# 将它们发送到 API?
- android - Admob 真实广告未显示
- python - 在 discord.py 中每分钟发送一次消息
- 3d - 体素渲染中的奇怪效果
- python - 查找连续列的平均值
- android - Android如何在键盘启动时调整活动大小
- python - /login/ 处的 NoReverseMatch(未找到“索引”的反向。“索引”不是有效的视图函数或模式名称。)