Blazor中的“无法从绑定属性'bind-value'推断属性名称”

时间:2019-08-16 17:33:40

标签: c# blazor

我刚刚将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等。但一切都无济于事。

是什么原因造成的?

4 个答案:

答案 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”语句

如果您忘记或删除了组件名称空间的@using语句,也会遇到相同的错误。如果您使用的是ReSharper,这很容易做到,因为它目前将它们标记为未使用并提供删除它们的功能。

检查这是否是问题

检查编译器是否正确将您的组件标识为Blazor组件而不是HTML标签的一种好方法是检查关键字的颜色编码。如果一切正常,它们将具有相同的颜色(在下面的示例中为绿色):

enter image description here

如果名称或名称空间有误,则会看到多种颜色(请注意,DataValueField现在的颜色与TelerikDropdownList不同:

enter image description here

答案 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 语句..

来自 MS 文档: https://docs.microsoft.com/en-us/aspnet/core/blazor/components/data-binding?view=aspnetcore-5.0#binding-with-component-parameters

<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