我有这个自定义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?
答案 0 :(得分:1)
测试版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);
}