ASP.. NET Core双重验证用点代替逗号



我有一个输入验证,我必须验证一个双精度值。我的问题是,如果我输入"3.14"验证器接受它,但如果我输入&;3,14&;,它会给出错误。数据库也存储它与点,所以我需要一个解决方案来代替逗号与点,并在验证它。

编辑

有一些字段是不需要的

您需要在应用程序中为十进制和双十进制编写自定义模型绑定器,如下所示

public class MyDecimalModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = valueResult };
object actualValue = null;
try
{
actualValue = Convert.ToDouble(valueResult.AttemptedValue
.Replace(",", "."),
CultureInfo.InvariantCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}

对于double

也是一样
public class MyDoubleModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
ValueProviderResult valueResult = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName);
ModelState modelState = new ModelState { Value = valueResult };
object actualValue = null;
try
{
actualValue = Convert.ToDouble(valueResult.AttemptedValue/**/.Replace(",", "."),
CultureInfo.InvariantCulture);
}
catch (FormatException e)
{
modelState.Errors.Add(e);
}
bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
return actualValue;
}
}

然后您需要将它们添加到您的Startup类(取决于您的体系结构的程序类)中的服务集合

services.AddControllers(options =>
{
options.ModelBinderProviders.Insert(0, new MyDoubleBinderProvider());
});

最新更新