使用 Blazor 设置 chekbox 值而不进行绑定

use*_*669 2 c# checkbox blazor

这可能很容易,但我有点卡住了。我正在从数据库读取数据,需要一个复选框来反映布尔值的当前状态,我可以在代码中获取状态,但无法弄清楚如何添加或删除复选框输入的“checked”属性。我正在使用@onchange来调用函数,但不能使用@Bind。我假设我可以创建一个返回值“”“checked”的函数,然后在标签内部调用它,但这不起作用。

这是我的输入:

<input type="checkbox" class="form-control" value="test" @BoolChecker() @onchange="@function1()" />
Run Code Online (Sandbox Code Playgroud)

这是函数 BoolChecker():

public string BoolChecker()
        {
            if (mybool != null) {
                return (mybool == true) ? "checked" : "");
            }
            else
            {
                return "";
            }
        }
Run Code Online (Sandbox Code Playgroud)

我可以在哪里放置 BoolChecker 函数来完成这项工作?如果不清楚,如果 BoolChecker 函数返回“checked”(并且 mybool 为 true),则假设使复选框显示为选中状态

Isa*_*aac 6

这是另一个答案:

@* 注意:此代码片段使用复选框创建双向数据绑定:从下面的 @code 块中定义的名为 tided 的变量到输入复选框。最初我们将其值设置为 false,这就是为什么当您运行代码时您会注意到该复选框未被选中。这是一种单向绑定。

要创建从控件到变量的绑定,您应该添加带有事件处理程序的 @onchange 指令,该事件处理程序从系统获取新值并更新勾选的变量。

您可能已经注意到,与绑定到其 value 属性的大多数输入元素不同,输入复选框绑定到 *checked** 属性

value 属性存储应发布到数据库的值@

<input type="checkbox" value="test" checked="@ticked" @onchange="@((args) => { ticked = (bool)
        args.Value; Console.WriteLine(ticked.ToString());} )" />

@code {
    bool ticked = false;
}
Run Code Online (Sandbox Code Playgroud)

当然,您可以使用 @bind 指令创建双向数据绑定,如下所示:

<input type="checkbox" value="test" @bind="@ticked" />
Run Code Online (Sandbox Code Playgroud)

请注意,您不能将 @onchange 指令与 @bind 指令一起使用,因为 @bind 指令是一个编译器指令,告诉编译器创建绑定,就像我在第一个输入中手动所做的那样,当然您不允许有两个 @ onchange 属性。

注意:你不能这样做:@onchange="@function1()"分配给 @onchange 指令的值应该是 lambda 表达式,例如:

@onchange="@(() => function1)"

仅当要将值传递给 function1 时才应使用括号,如下所示:@onchange="@(() => function1 (true))"

此外,@BoolChecker()必须是分配给属性的值。你不能这样使用它......你可以这样做:

@onchange="@(() => BoolChecker)"
Run Code Online (Sandbox Code Playgroud)