C# 如何在ASP.NETMVC5.2.7(.NETFramework)中处理表单中的双精度数字? 我目前在使用asp mvc生成的视图时,在表单中处理双倍数字时遇到了一个问题 让我展示一下我的模型Eleve,这里我关注的领域是Moyenne(相对注释是我从以前的研究中最后尝试的):
控制器是asp mvc 5使用实体框架自动生成的控制器。C# 如何在ASP.NETMVC5.2.7(.NETFramework)中处理表单中的双精度数字? 我目前在使用asp mvc生成的视图时,在表单中处理双倍数字时遇到了一个问题 让我展示一下我的模型Eleve,这里我关注的领域是Moyenne(相对注释是我从以前的研究中最后尝试的):,c#,asp.net-mvc,validation,razor,C#,Asp.net Mvc,Validation,Razor,控制器是asp mvc 5使用实体框架自动生成的控制器。 观点的相关部分: <div class="form-group"> @Html.LabelFor(model => model.Moyenne, htmlAttributes: new { @class = "control-label col-md-2" }) <div class="col-md-10">
观点的相关部分:
<div class="form-group">
@Html.LabelFor(model => model.Moyenne, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Moyenne, new { htmlAttributes = new { @class = "form-control decimal-small inline" } })
@Html.ValidationMessageFor(model => model.Moyenne, "", new { @class = "text-danger" })
</div>
</div>
@LabelFor(model=>model.Moyenne,htmlAttributes:new{@class=“controllabel col-md-2”})
@EditorFor(model=>model.Moyenne,new{htmlAttributes=new{@class=“form-control-decimal-small-inline”})
@Html.ValidationMessageFor(model=>model.Moyenne,“,new{@class=“text danger”})
当我使用非整数输入提交表单时,会收到一条错误消息(法语)告诉我该值不正确:
实际上,我需要能够使用分隔符后面有2位小数的数字。目前,只接受整数。看来我找到的解决方案已经过时了,或者我错过了什么。
谢谢你的帮助 你好Benoit essayes commeça
[DisplayFormat(DataFormatString = "{0:#,##0.00#}", ApplyFormatInEditMode = false)]
public double? Moyenne{ get; set; }
这是一个很好的例子:
^-?\d(.\d+)?[^.]
还根据一些CultureInfo参数验证了ModelState。由于使用法语, 小数点分隔符为“”,因此在断点中可以看到0 这是一个工作区(使用自动生成的控制器): 其想法是在GET中更改CultureInfo并在POST中恢复它
public ActionResult Create()
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create( Eleve eleve)
{
if (ModelState.IsValid)
{
db.Eleve.Add(eleve);
db.SaveChanges();
return RedirectToAction("Index");
}
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fr-FR");
return View(eleve);
}
//
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0.00}")]
如果我错了,请纠正我-但在法国,官方的十进制分隔符是逗号,而不是点?您是否尝试过改为键入
3,2
?这里的问题似乎是一个典型的区域设置问题。是的,我尝试了这两种方法,因为我怀疑这是问题所在,它给出了相同的结果。顺便说一句,你的观点在大多数情况下都是正确的,但在使用电脑时,法国人通常使用“.”作为分隔符。您好,谢谢您的回答。我同时尝试了这两种方法,但这一次我仍然收到一条错误消息,“无效率”。你自己试过吗?
public ActionResult Create()
{
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-US");
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create( Eleve eleve)
{
if (ModelState.IsValid)
{
db.Eleve.Add(eleve);
db.SaveChanges();
return RedirectToAction("Index");
}
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("fr-FR");
return View(eleve);
}
//
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:0.00}")]