我正在asp.net core 6.0中研究这个应用程序,我试图保存一个浮点值(在这种情况下为0.4),它被保存为一个值为4的int。我不明白为什么这个类的值是4,但是当检查模型状态时,"water"的值变量为0.4(正确值)。这里我们有一个类:class
public class RPGH01_01
{
public int ID { get; set; }
[Display(Name="Toma agua*")]
public float Water { get; set; }
[Display(Name = "Fecha")]
public DateTime Date { get; set; }
[Display(Name = "Valor cloro**")]
public float Chlorine { get; set; }
[Display(Name = "Color")]
public bool Color { get; set; }
[Display(Name = "Olor")]
public bool Smell { get; set; }
[Display(Name = "Turbidez")]
public bool Turbidity { get; set; }
[Display(Name = "Sabor")]
public bool Flavor { get; set; }
[Display(Name = "Observaciones")]
public string Observations { get; set; }
public int UserID { get; set; }
}
类的值:值输入和模型状态验证的值:
public async Task<IActionResult> Create([Bind("ID,Water,Date,Chlorine,Color,Smell,Turbidity,Flavor,Observations,UserID")] RPGH01_01 rPGH01_01)
{
//This is to know what user create the report
var userAccountId = HttpContext.Session.GetString("user");
rPGH01_01.UserID = Convert.ToInt32(userAccountId);
if (ModelState.IsValid)
{
_context.Add(rPGH01_01);
await _context.SaveChangesAsync();
return RedirectToAction(nameof(Index));
}
return View(rPGH01_01);
}
状态验证谢谢你的时间
我尝试插入其他值(如0.4),但它拒绝它们,因为它们是文本。我已经改变了变量,看看它是否通过使用double而不是float来工作。
这很可能是由于您配置的区域性。
在美国,句号用作小数点标记,逗号用作分隔符。但是这些分隔符在很大程度上被忽略了
float.Parse("4,500", CultureInfo.GetCultureInfo("en-US")); // 4500
float.Parse("4,5", CultureInfo.GetCultureInfo("en-US")); // 45
float.Parse("0,4", CultureInfo.GetCultureInfo("en-US")); // 4
在智利,逗号用作十进制标记,句点用作分隔符。
float.Parse("0.4", CultureInfo.GetCultureInfo("es-CL")) // 4
float.Parse("0,4", CultureInfo.GetCultureInfo("es-CL")) // 0.4
这可能不是一个错误:如果您的目标受众来自这样表示数字的文化,那么用户实际上可能希望输入"0,4"
来表示0.4
。
如果您有来自不同文化的用户,您需要找到一种方法来确定用户的期望文化,并在请求中设置它。