Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.Net MVC ModelBinder.BindProperty_C#_Asp.net Mvc_Model Binding - Fatal编程技术网

C# ASP.Net MVC ModelBinder.BindProperty

C# ASP.Net MVC ModelBinder.BindProperty,c#,asp.net-mvc,model-binding,C#,Asp.net Mvc,Model Binding,我正在尝试构建一个可以在多个不同模型上使用的ModelBinder。它唯一的工作就是把十进制数转换成货币。这是我的密码: protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) { if (propertyDescriptor

我正在尝试构建一个可以在多个不同模型上使用的ModelBinder。它唯一的工作就是把十进制数转换成货币。这是我的密码:

    protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
    {
        if (propertyDescriptor.PropertyType == typeof(decimal?))
        {
            var possibleDecimal = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);
            if (possibleDecimal != null)
            {
                decimal d = 0;
                if (decimal.TryParse(possibleDecimal.AttemptedValue, NumberStyles.Currency, null, out d))
                {
                    propertyDescriptor.SetValue(bindingContext.Model, d);
                }
                else
                {
                    bindingContext.ModelState[propertyDescriptor.Name].Errors.Add("Decimal is not currency.");
                }
            }
        }
        else base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }
}

在这个代码块中,possibleDecimal始终为null。我不明白我做错了什么。

因为
IValueProvider.GetValue
返回null,可能是
propertyDescriptor.Name
提供的键为空或缺失。从哪个实例
propertyDescriptor
获得它的值?在我发布这篇文章之后,我想我发现了我的问题,但我想等待,看看是否有更好的答案。控制器中的我的Acton绑定到一个数组,因此表单值的格式如下:[0].PropertyName或[1].PropertyName。这是否导致我的空值?由于
IValueProvider.GetValue
返回空值,可能是
propertyDescriptor.Name
提供的键为空或缺失。从哪个实例
propertyDescriptor
获得它的值?在我发布这篇文章之后,我想我发现了我的问题,但我想等待,看看是否有更好的答案。控制器中的我的Acton绑定到一个数组,因此表单值的格式如下:[0].PropertyName或[1].PropertyName。这是导致我的空值的原因吗?