在视图模型中解析小数

时间:2011-08-09 09:51:47

标签: 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)

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

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

3 个答案:

答案 0 :(得分:11)

您需要编写自定义模型绑定器才能执行此操作。

/// <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());

答案 1 :(得分:3)

答案 2 :(得分:0)

您是否可以只更改DataFormatString,以便使用点格式化数字,例如{0:0.00}或类似的?