gpt4 book ai didi

c# - ASP.NET MVC 5 应用程序中的十进制数

转载 作者:太空狗 更新时间:2023-10-29 22:58:40 24 4
gpt4 key购买 nike

我对小数有疑问。

如果我在文本框中使用 .(点)而不是 ,(逗号),它在 Controller 中为 null。

我知道这是一个语言问题,因为在西类牙语中我们使用逗号而不是小数点,但我需要使用点。

有可能改变这个吗?

这很奇怪,因为在 Controller 中我必须使用 .(点)表示小数,即:

我可以做 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" } })

在 Controller 中:

public ActionResult Create([Bind(Include = "ID,Codigo,Fecha,Trabajo,Notas,BaseImponible,Iva,Total,Verificado,FormaDePagoID,ClienteID")] Presupuesto presupuesto)
{

最佳答案

谢谢大家。我找到了这个 code from 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());

现在使用 decimal 类型而不是 float 或 double,一切都会好起来的!!谢谢 friend 们,再见!

关于c# - ASP.NET MVC 5 应用程序中的十进制数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25849160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com