ASP.NET MVC 5应用程序中的十进制数
本文关键字:十进制数 应用程序 NET MVC ASP | 更新日期: 2023-09-27 18:21:52
我对十进制数字有问题。
如果我使用。(dot)而不是文本框中的(逗号),它在控制器中为null。
我知道这是一个语言问题,因为在西班牙语中,小数用逗号代替句点,但我需要用句点。
有可能改变这一点吗?
这很奇怪,因为在控制器中我必须使用。(点)表示小数,即:
我可以做float x = 3.14
,但我不能做float x = 3,14
,所以我不理解。。。在某些情况下,我不得不使用点。。。在其他情况下,我必须使用逗号。。。
这是我的代码:
在模型中:
[Display(Name = "Total")]
public double Total { get; set; }
视图:
@Html.EditorFor(model => model.Total, new { id = "Total", htmlAttributes = new {@class = "form-control" } })
在控制器中:
public ActionResult Create([Bind(Include = "ID,Codigo,Fecha,Trabajo,Notas,BaseImponible,Iva,Total,Verificado,FormaDePagoID,ClienteID")] Presupuesto presupuesto)
{
谢谢大家。我从Phil Haack那里找到了这个代码,它运行得很好。
在项目的任何文件夹中创建一个类
public class ModelBinder
{
public class DecimalModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
object result = null;
// Don't do this here!
// It might do bindingContext.ModelState.AddModelError
// and there is no RemoveModelError!
//
// result = base.BindModel(controllerContext, bindingContext);
string modelName = bindingContext.ModelName;
string attemptedValue =
bindingContext.ValueProvider.GetValue(modelName).AttemptedValue;
// Depending on CultureInfo, the NumberDecimalSeparator can be "," or "."
// Both "." and "," should be accepted, but aren't.
string wantedSeperator = NumberFormatInfo.CurrentInfo.NumberDecimalSeparator;
string alternateSeperator = (wantedSeperator == "," ? "." : ",");
if (attemptedValue.IndexOf(wantedSeperator) == -1
&& attemptedValue.IndexOf(alternateSeperator) != -1)
{
attemptedValue =
attemptedValue.Replace(alternateSeperator, wantedSeperator);
}
try
{
if (bindingContext.ModelMetadata.IsNullableValueType
&& string.IsNullOrWhiteSpace(attemptedValue))
{
return null;
}
result = decimal.Parse(attemptedValue, NumberStyles.Any);
}
catch (FormatException e)
{
bindingContext.ModelState.AddModelError(modelName, e);
}
return result;
}
}
}
将其添加到Global.asax 中的Application_Start()方法中
ModelBinders.Binders.Add(typeof(decimal), new ModelBinder.DecimalModelBinder());
ModelBinders.Binders.Add(typeof(decimal?), new ModelBinder.DecimalModelBinder());
现在使用十进制而不是浮点或双精度,一切都会好起来的!!谢谢队友们,再见!。
您的控制器使用C#。特定语言声明.
是十进制分隔符。时期这不是特定语言,仅此而已。
您的数据库或用户界面(使用服务器的语言设置)可能使用其他十进制分隔符,而不是默认(美国)语言设置C#使用的分隔符。这就是为什么必须使用,
作为分隔符的原因。
您需要使用自定义模型绑定器。
查看此博客文章http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/
如果您希望根据UI区域性在UI中以逗号(,)分隔的十进制输入转换为句点(.)以绑定到C#十进制数,您可以使用Asp.NetMVC的自定义模型绑定器,其中使用逗号分隔的十进制字符串并将逗号替换为句点,然后分配给C#十进制属性。
其优点是,它可以在整个应用程序中重复使用,在应用程序中可能会出现小数转换的重复场景。
希望以下链接可以帮助你:
ASP.Net MVC自定义模型绑定说明http://odetocode.com/blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspxhttp://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx/