Blazor中如何将模型内的数组传入blazor-dragdrop组件的Dropzone
Blazor中如何将模型内的数组传入blazor-dragdrop组件的Dropzone
嗨,我来帮你搞定这个问题!你遇到的问题其实很清晰——你现在传给Dropzone组件的是整个TestSuiteModel对象,但组件需要的是集合类型的数据源,也就是你模型里的value列表呀!
问题根源
Dropzone的Items参数要求传入一个可枚举的集合(比如List<T>这类),而你之前写的<Dropzone Items="TestSuitesResult">里,TestSuitesResult是TestSuiteModel的实例,它本身不是集合,组件自然没法识别它,所以才会报错。
解决方法
你需要传入模型里的value属性(也就是存储work items的那个List<Value>),不过要注意:因为你是异步加载数据的,一开始TestSuitesResult可能是null,直接访问TestSuitesResult.value会触发空引用异常,所以一定要先做null检查。
这里给你两种稳妥的写法:
写法一:先判断再渲染
这种方式最直观,先确认数据加载完成后再渲染Dropzone:
@if (TestSuitesResult != null && TestSuitesResult.value != null) { <Dropzone Items="TestSuitesResult.value"> <div>@context.id - @context.url</div> </Dropzone> } else { <p>正在加载测试套件...</p> }
写法二:使用空条件运算符(简化版)
如果你的C#版本支持,也可以用空条件运算符简化,但还是建议配合加载状态提示:
<Dropzone Items="TestSuitesResult?.value ?? new List<Value>()"> <div>@context.id - @context.url</div> </Dropzone> @if (TestSuitesResult == null) { <p>正在加载测试套件...</p> }
额外小建议
虽然不影响功能,但C#里通常推荐用帕斯卡命名法给属性命名(比如把count改成Count,value改成Value,id改成Id),这样更符合编码规范,也能避免和一些关键字冲突哦!
备注:内容来源于stack exchange,提问作者elektra
相关产品推荐
相关产品推荐

