ASP razor页面在生产部署后删除逗号(,)



我有一个像这样的输入字段

<td><input type="text" onchange="changesUnSaved()" pattern="[0-9,]{0,4}" title="Lorum ipsum" value="@(Model.EstablishmentWeeks.Single(x => x.WeekNumber == weekNum && x.Year == currentYear).Hours / 40.0)" class="form-control" name="amountOfFTE"></td>

该输入字段用于调用期望为float类型的函数。

函数是这样的:

public IActionResult UpdateEstablishmentWeeks(int esteblishmentId, int currentYear, int weekNum, float amountOfFTE)

在本地环境中,如果我输入一个十进制数,例如25,5值中的逗号保留,结果为25,5

但是当我将代码发布到生产环境中时,我注意到一些奇怪的事情。

在生产环境中,如果我输入一个十进制数,例如25,5去掉值中的逗号,结果为255

我想这与我的浏览器有关,但我不确定。有人知道这个问题的解决方法吗?

这是一个文化/地区问题。在本地计算机上,您可能有一个带有逗号分数数字分隔符的区域设置(德语、俄语等)。在这种情况下,当后端获得"25,5"时,它通过使用当前区域性解析将其绑定到模型,结果为25.5。

但是,看起来生产环境有一个点分数数字分隔符(例如英语)和逗号分隔符。因此,当后端获取字符串"25,5"时,它会用英文locale对其进行解析,从而在结果中给出数字255。

如何在应用中处理文化/地区特定的事情,没有一个银弹。它包括几种策略,各有利弊。例子可能是:

  • 将前端和后端锁定为CultureInvariant数字格式(https://learn.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-6.0#globalization-behavior-of-model-binding-route-data-and-query-strings)
  • 根据客户端位置/选择的语言设置绑定区域设置,并期望客户端以其文化格式输入数字
  • 期望该数字可以用逗号或点输入,并尝试将其绑定在每种情况下选择最佳结果
  • 和其他

最新更新