【问题标题】:MVC6 Custom IModelBinder, Beta8 changed?MVC6 自定义 IModelBinder,Beta8 改变了吗?
【发布时间】:2015-10-19 09:12:19
【问题描述】:

我有这个自定义的IModelBinder 可以正常工作,但我已经卸载了 beta5 和 beta7,所以我使用的是最新的 beta8。看来代码已经完全改变了,我似乎无法在 github 上找到任何 vNext 代码来查看更改。

谁能告诉我如何更新它以使用 beta8,或者给我一个指向 github 上源代码的 URL?

public class CommaDelimitedArrayModelBinder : IModelBinder
{
    public async Task<ModelBindingResult> BindModelAsync(ModelBindingContext bindingContext)
    {
        var key = bindingContext.ModelName;
        var val = bindingContext.ValueProvider.GetValue(key);
        var result = new ModelBindingResult(null, key, false);

        if (val != null)
        {
            var s = val.FirstValue;

            if (s != null)
            {
                var elementType = bindingContext.ModelType.GetElementType();
                var converter = TypeDescriptor.GetConverter(elementType);
                var values = Array.ConvertAll(s.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries),
                    x => { return converter.ConvertFromString(x != null ? x.Trim() : x); });

                var typedValues = Array.CreateInstance(elementType, values.Length);

                values.CopyTo(typedValues, 0);

                result = new ModelBindingResult(typedValues, key, true);
            }
            else
            {
                // change this line to null if you prefer nulls to empty arrays 
                result = new ModelBindingResult(Array.CreateInstance(bindingContext.ModelType.GetElementType(), 0), key, true);
            }
        }

        return result;
    }

}

我唯一的错误是 ModelBindResult 不接受任何构造函数参数并且所有参数都是只读的,所以它们不能设置?那么,如果我不能在其上设置任何属性,我应该如何返回 ModelBindingResult?

【问题讨论】:

    标签: c# asp.net .net asp.net-core


    【解决方案1】:

    beta 8 中ModelBindingResult 的源代码是here。它具有接受参数并返回新实例的静态方法,例如:

    public static ModelBindingResult Success(string key, object model)
    {
       if (key == null)
       {
          throw new ArgumentNullException(nameof(key));
       }
    
       return new ModelBindingResult(key, model, isModelSet: true);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2016-05-09
      • 1970-01-01
      • 2016-05-12
      • 1970-01-01
      • 2014-01-26
      • 2016-04-23
      相关资源
      最近更新 更多