【问题标题】:How to bind to an attribute that has dashes in its name in Blazor?如何绑定到 Blazor 中名称中包含破折号的属性?
【发布时间】:2021-04-03 00:55:51
【问题描述】:

所有示例都展示了如何使用 @bind-attributename 在 blazor 中创建双向绑定。但是如果属性名是attribute-name 或更糟:data-attribute-name,怎么办?我在 Visual Studio 中不断收到错误消息,通知我它无法解析符号“绑定”。

我们使用具有我想要绑定的属性的自定义 WebComponent,如下所示:

@foreach(var item in Items)
{
    <smart-multi-select-checkbox data-checkbox-details="@item"
                                 data-checked="@item.IsChecked">
    </smart-multi-select-checkbox>
}

我需要双向绑定data-checked 属性。或者,如果这不可能,我需要捕获自定义事件data-check-changed。但这也不是很直接。

【问题讨论】:

  • 不太确定我是否理解您的问题,属性是类中属性的表示,它们不能包含“-”。
  • 好吧,由于某种原因,当我在 data 之后添加破折号时,@bind 部分在我的 Visual Studio 中变为红色。所以@bind-data:一切都好; @bind-data-checked:@bind 变红了。我只是假设第二个破折号有问题,因为当我添加它时它立即变红。

标签: c# blazor webassembly .net-5


【解决方案1】:

据我所知,如果您使用@bind-checked=@item.IsChecked 形式的绑定,那么您的组件/元素需要有一个相应的checkedChanged 事件,该事件会在checked 更改时触发。 Blazor 专门查找 {attributeName}Changed。我相信一些标准元素不需要这个,因为它们在 Blazor 中是自动硬连线的。

但是,如果您有非标准属性,Blazor 将无法知道更改通知的来源。所以你也需要在元素/组件中添加一个@bind-checked:event="nameOfEvent"。以下对我来说编译得很好(并且ViewModel.Question 是一个真实的对象,但是data-testOnChange 是虚构的):

<div @bind-data-test=@ViewModel.Question @bind-data-test:event="OnChange">test</div>

【讨论】:

  • 如果您仍然遇到错误,请确保您在某处有@using Microsoft.AspNetCore.Components.Web。
  • 但是如果更改事件是来自 javascript 的自定义事件,使用调度呢?它似乎不喜欢 data-check-changed 自定义事件。
  • 事件可能必须以 "on" 开头,如 "ondata-check-changed" 中的 Blazor 才能将其识别为事件。尝试重命名您的活动,看看是否是这种情况。 (至少要知道这是不是真的)docs.microsoft.com/en-us/aspnet/core/blazor/components/…
猜你喜欢
  • 2012-08-31
  • 2013-06-11
  • 1970-01-01
  • 1970-01-01
  • 2021-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 1970-01-01
相关资源
最近更新 更多