c# - 在 View 模型中解析小数

标签 c# .net asp.net-mvc-3 decimal

我正在使用 ASP.NET MVC 3 开发网站。

属性

[DisplayName("Cost"), DisplayFormat(DataFormatString = "{0:F2}", ApplyFormatInEditMode = true)]
public decimal Cost { get; set; }

查看

@Html.EditorFor(x => x.Cost)

View 将 Cost 呈现为 1000,00(例如)。问题是,验证需要一个点而不是逗号。如何输出 1000.00 而不是 1000,00?或者反转验证以接受逗号而不是点?

编辑。我在我的 web.config 中将全局化设置为 sv-SE(瑞典)。

最佳答案

您需要编写自定义模型绑定(bind)器来执行此操作。

/// <summary>
/// http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx
/// </summary>
public class DecimalModelBinder : 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.ToDecimal(valueResult.AttemptedValue,
                CultureInfo.CurrentCulture);
        }
        catch (FormatException e)
        {
            modelState.Errors.Add(e);
        }

        bindingContext.ModelState.Add(bindingContext.ModelName, modelState);
        return actualValue;
    }
}

在您的 Global.asax 文件中,将以下内容添加到您的 Application_Start 方法

ModelBinders.Binders.Add(typeof(decimal), new DecimalModelBinder());

关于c# - 在 View 模型中解析小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6994308/

相关文章:

c# - 如何在运行时在 WinForms 中设置多个按钮文本?

.net - 如何从注册表检查 .NET 版本?

c# - MEF 如何设法实例化作为外部程序集的内部类的导出部件?

c# - MVC Url.Action 在服务器中呈现不同于本地的 URL 参数

c# - Azure Functions 应用程序中多个函数的 Application Insights 警报

c# - 所有事件的 ThreadLocal<T> 和 [ThreadStatic] 引用的列表

c# - 在 EMGU CV 中手动对焦相机

c# - REST 服务和大文件

razor - 我应该在 ASP.NET MVC 3 中放置声明性 HTML 助手

c# - MVC 默认区域不工作