在视图模型中解析十进制

本文关键字:十进制 视图 模型 | 更新日期: 2023-09-27 18:04:48

我正在开发一个网站在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?或者反向验证以接受逗号而不是点?

编辑。我在我的网站上设置了全球化。config to sv-SE(瑞典).

在视图模型中解析十进制

您需要编写一个自定义模型绑定器来完成此操作。

/// <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;
    }
}

在全局。asax文件,将以下内容添加到Application_Start方法

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

问题是在解析十进制分隔符在我的国家也是逗号:

我发现了一些不太好的解决方法:

http://rebuildall.umbraworks.net/2011/03/02/jQuery_validate_and_the_comma_decimal_separator

http://haacked.com/archive/2011/03/19/fixing-binding-to-decimals.aspx

你能不能改变DataFormatString,让它使用一个点来格式化数字,例如{0:00},或类似的?