这可能很容易,但我有点卡住了。我正在从数据库中读取数据,需要一个复选框来反映布尔的当前状态,我可以在代码中获得状态,但无法计算如何添加或删除复选框输入的"checked"属性。我正在使用@onchange调用函数,不能使用@绑定。我假设我可以创建一个返回值的函数:">或"checked">,然后在标签内部调用它,但这行不通。
这是我的输入:
<input type="checkbox" class="form-control" value="test" @BoolChecker() @onchange="@function1()" />
这就是函数BoolChecker((:
public string BoolChecker()
{
if (mybool != null) {
return (mybool == true) ? "checked" : "");
}
else
{
return "";
}
}
我可以把BoolChecker函数放在哪里让它工作?如果它不清楚,假设如果BoolChecker函数返回"checked"(mybool为true(,则使复选框显示为checked
这是另一个答案:
@*注意:此代码段使用复选框来创建双向数据绑定:从下面@code块中定义的名为checked的变量到input复选框。最初,我们将其值设置为false,这就是为什么当您运行代码时,您会注意到复选框没有被选中。这是单向绑定。
要创建从控件到变量的绑定,您应该添加带有事件处理程序的@onchange指令,该事件处理程序从系统获取新值并更新勾选的变量。
正如您可能已经注意到的那样,与大多数绑定到其值属性的输入元素不同,输入复选框与*checked**属性绑定
value属性存储应该发布到数据库@的值
<input type="checkbox" value="test" checked="@ticked" @onchange="@((args) => { ticked = (bool)
args.Value; Console.WriteLine(ticked.ToString());} )" />
@code {
bool ticked = false;
}
当然,您可以使用@bind指令创建这样的双向数据绑定:
<input type="checkbox" value="test" @bind="@ticked" />
请注意,不能将@onchange指令与@bind指令一起使用,因为@bind指示是一个编译器指令,它告诉编译器像我在第一次输入中手动创建绑定一样,当然也不允许有两个@onchange属性。
注意:不能这样做:@onchange="@function1()"
分配给@onchange指令的值应该是lambda表达式,例如:
@onchange="@(() => function1)"
只有当您要将值传递给函数1时,才应该使用括号,如下所示:@onchange="@(() => function1 (true))"
此外,@BoolChecker()
必须是分配给属性的值。你不能这样用。。。你可以做:
@onchange="@(() => BoolChecker)"
下面的代码片段创建了一个带有十个输入复选框的表元素。将代码复制到索引组件中并运行以进行测试。然后检查代码并尝试了解如何在Blazor 中完成
<table class="table table-hover">
<thead>
<tr>
<th>Select</th>
<th>Number</th>
<th>Text</th>
</tr>
</thead>
<tbody>
@foreach (var row in rows)
{
<tr @onclick="@(() => { row.Selected = !row.Selected;
Console.WriteLine(row.Selected.ToString()); })">
<td><input type="checkbox" checked="@row.Selected"
@onchange="@((args) => { row.Selected = (bool)
args.Value; Console.WriteLine(row.Selected.ToString());} )" /></td>
<td>@row.Number</td>
<td>@row.Text</td>
</tr>
}
</tbody>
</table>
@code
{
List<Row> rows = Enumerable.Range(1, 10).Select(i => new Row
{
Selected =
false,
Number = i,
Text = $"Item {i}"
}).ToList();
private class Row
{
public bool Selected { get; set; }
public int Number { get; set; }
public string Text { get; set; }
}
}
绑定有什么问题?如果你需要,你可以挂上设置