【问题标题】:Binding the checked attribute of html input to boolean method return value in blazor将html输入的checked属性绑定到blazor中的布尔方法返回值
【发布时间】:2020-10-21 19:13:52
【问题描述】:

我目前正在开发一个 Blazor 项目。在这个项目中,我需要在我的 C# 代码中的列表中添加一些默认值。问题是我找不到将布尔方法返回值绑定到输入的“已检查”属性的方法。

代码:

我确实有一个列表,我正在将此列表中的每个条目添加一个输入(复选框)字段到我的 html:

@foreach (ProfessionViewModel prof in Professions)
{
    <div class="form-group m-1">
        <div class="form-check">

            <input class="form-check-input" type="checkbox" id="@prof.Id" 
                  @onchange="eventArgs => { ToggleProfessions(prof, eventArgs.Value); }" />
                                        
        </div>
    </div>
}

我找不到将“checked”属性绑定到检查该项目是否存在于其他列表(SelectedProfessions 列表,在@code 部分中定义)的方法的方法。

我的清单:

public List<ProfessionViewModel> SelectedProfessions { get; set; } = new List<ProfessionViewModel>();

我的布尔返回方法:

private bool CheckIfProfessionIsAssigned(ProfessionViewModel prof)
{
    if (SelectedProfessions.Contains(prof))
        return true;
    return false;
}

问题描述:

“专业”集合包含应用程序中可用的所有专业。在这种形式中,用户应该能够单独选择某些职业(用于职业过滤器)。 每个选定的职业都包含在“SelectedProfessions”集合中。问题是我无法根据帮助属性“CheckIfProfessionIsAssigned”绑定(或渲染)复选框值,该属性确定用户当前是否选择了该职业。

【问题讨论】:

  • 我会使用一个视图模型,其中包含每个专业的布尔检查属性,然后将该属性绑定到输入。获取列表只是一个检查专业的 linq 查询

标签: c# html forms blazor


【解决方案1】:

我自己没有尝试过这些,但根据这个答案 - https://stackoverflow.com/a/60343185 - 最初检查复选框可能会起作用:

<input type="checkbox" checked="@CheckIfProfessionIsAssigned(prof)">

您也可以尝试创建一个名为 professionsSelected 的整数和布尔值字典,用于存储每个职业 ID(如果它被选中),然后将其绑定到复选框,例如:

<input type="checkbox" @bind="@professionsSelected[prof.Id]" />

【讨论】:

  • 第一个建议在添加“StateHasChanged”后对我有用。我一开始就这样尝试过,但缺少的是“StateHasChanged”,因为它没有自动更新。谢谢!
猜你喜欢
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 2014-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
相关资源
最近更新 更多