我刚刚将Blazor项目从Core 3 Preview 6迁移到Preview 8,现在出现此错误:
无法从bind属性推断出属性名称 “绑定值”。绑定属性的格式应为“绑定”或 “绑定值”及其相应的可选参数,例如 'bind-value:event','bind:format'等。
我已经隔离了导致这种情况发生的组件,并且似乎确实按照错误消息中的说明bind-value
设置了代码:
<TelerikDropdownList Data="@State.ContainerSizes"
ValueField=@nameof(ContainerSize.ContainerSizeId)
TextField=@nameof(ContainerSize.ContainerSizeName)
@bind-Value="@ContainerSizeIdNoNull"
>
</TelerikDropdownList>
我尝试从@
中删除@bind-Value
并更改大小写@bind-Value
等。但一切都无济于事。
是什么原因造成的?
答案 0 :(得分:2)
“无法从绑定属性'bind-value'推断属性名称” Blazor中的异常
我遇到了类似的问题,但解决方案相当荒谬而不是荒谬!
最后,我发现了以下信息:添加已使用组件的缺少的using语句很有帮助。我也是。而且有效!
尽管我的组件名称以绿色颜色显示(就像识别出组件类型一样),却没有。只有缺少的使用才能正确执行此操作。这样的误导行为。
因此,如果您遇到相同的问题,请首先检查是否缺少用于实际组件的“使用中” 甚至以绿色显示。
答案 1 :(得分:1)
事实证明,至少有两个原因:
原来的答案是,blazor组件的命名现在区分大小写,并且我在“ TelerikDropdownList”中缺少一个大写字母,该字母应为TelerikDrop D ownList。
使用区分大小写的名称的更改为documented here,并在here中进行了讨论。这个想法是为了减少误导性消息,但是却引入了另一个消息,因此我提出了an issue for that on the AspNetCore repo。
如果您忘记或删除了组件名称空间的@using
语句,也会遇到相同的错误。如果您使用的是ReSharper,这很容易做到,因为它目前将它们标记为未使用并提供删除它们的功能。
检查编译器是否正确将您的组件标识为Blazor组件而不是HTML标签的一种好方法是检查关键字的颜色编码。如果一切正常,它们将具有相同的颜色(在下面的示例中为绿色):
如果名称或名称空间有误,则会看到多种颜色(请注意,Data
和ValueField
现在的颜色与TelerikDropdownList
不同:
答案 2 :(得分:1)
我可以添加另一个 - 不是明显的陷阱(至少对我而言)。
完全限定组件,接下来依靠 using 语句来识别属性不起作用。这是由智能感知添加的。
不工作的例子:
@using WebUI.Components.Modals
<WebUI.Components.Modals.WebUI.Components.Modals.AssetModal @bind-IsVisible="_assetDialogVisible" Asset="_selectedAsset"></WebUI.Components.Modals.WebUI.Components.Modals.AssetModal>
工作版本:
@using WebUI.Components.Modals
<AssetModal @bind-IsVisible="_assetDialogVisible" Asset="_selectedAsset"></AssetModal>
答案 3 :(得分:0)
就我而言,我有以下参数:
[Parameter]
public string[] BindingValue { get; set; }
[Parameter]
public EventCallback<string[]> BindingValueChanged { get; set; }
和绑定:
<MultiselectDropdownComponent
@bind-BindingValue="SessionState.MyArray" />
产生与主题相同的错误。我还指定了一个 using
语句..
<Child @bind-Year="year" />
<块引用>
Year 参数是可绑定的,因为它有一个与 Year 参数类型匹配的伴随 YearChanged 事件。
<块引用>按照惯例,属性可以通过包含分配给处理程序的@bind-{PROPERTY}:event 属性绑定到相应的事件处理程序。
<Child @bind-Year="year" @bind-Year:event="YearChanged" />
所以我决定明确指定 event
并且它起作用了!
<MultiselectDropdownComponent
@bind-BindingValue="SessionState.MyArray"
@bind-BindingValue:event="BindingValueChanged" />
编辑:使用 Blazor
WASM 和 .Net 5