【发布时间】: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