asp.net-mvc-3 - 默认 ASP.NET MVC 3 模型绑定(bind)器不绑定(bind)小数属性

标签 asp.net-mvc-3

出于某种原因,当我将此 JSON 发送到操作时:

{"BaseLoanAmount": 5000}

它应该绑定(bind)到一个具有名为“BaseLoanAmount”的十进制属性的模型,它不会绑定(bind),它只是保持 0。但是如果我发送:

{"BaseLoanAmount": 5000.00}

它确实绑定(bind)了属性,但为什么呢?如果5000没有小数,就不能转换成小数事件吗?

最佳答案

进入 asp.net mvc 的源代码后,问题似乎在于,对于转换,asp.net mvc 使用框架的类型转换器,由于某种原因,它对于 int 到十进制的转换返回 false,我最终使用了自定义模型绑定(bind)程序提供程序和小数模型绑定(bind)程序,您可以在此处查看:

public class DecimalModelBinder : DefaultModelBinder
{
    #region Implementation of IModelBinder

    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var valueProviderResult = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

        if (valueProviderResult.AttemptedValue.Equals("N.aN") ||
            valueProviderResult.AttemptedValue.Equals("NaN") ||
            valueProviderResult.AttemptedValue.Equals("Infini.ty") ||
            valueProviderResult.AttemptedValue.Equals("Infinity") ||
            string.IsNullOrEmpty(valueProviderResult.AttemptedValue))
            return 0m;

       return Convert.ToDecimal(valueProviderResult.AttemptedValue);
    }    

    #endregion
}

要注册此 ModelBinder,只需将以下行放入 Application_Start() 中:

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

关于asp.net-mvc-3 - 默认 ASP.NET MVC 3 模型绑定(bind)器不绑定(bind)小数属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5698984/

相关文章:

android - jQuery 和 MVC3 Razor 在 Android 浏览器上生成奇怪的 URL

asp.net-mvc - ASP.NET MVC : OutputCache attribute disregards RequireHttps attribute?

asp.net-mvc - 编码问题 asp.net mvc 4

.net - 如何确保处理 MongoDB 连接(DB Hanging)

asp.net-mvc - 如何在MVC WebGrid中显示行号

javascript - 在 javascript 中读取 cookie 值

asp.net-mvc - ASP.NET MVC : How to force all links to goto 1 page?

asp.net-mvc - ASP.NET MVC 3 : How to force an ActionLink to do a HttpPost instead of an HttpGet?

asp.net - HttpHandler 在 ASP.NET MVC3 Web 应用程序中不起作用

jquery - 在 ASP.NET MVC 4 中通过 ajax 在客户端显示服务器端模型状态错误