我正在嘗試使用 foreach 陳述句在我的 Blazor 表單組件中動態構建下拉串列。表單用于產品,產品可以鏈接到標簽。標簽本身有一個標簽型別,我想為每個標簽型別動態生成一個單獨的下拉串列,它會拉出鏈接到該型別的所有標簽,并且只系結到該標簽型別的標簽。
@foreach (var type in tagTypesDto)
{
<div class="form-group mb-3">
<RadzenSelect AllowClear="true" AllowFiltering="true" @[email protected](x => x == type.Tags.Select(x => x.Id).FirstOrDefault()) Multiple="true" Placeholder="@_localizer["PleaseSelect"]" [email protected](x => x.TagTypeId == type.Id)
TextProperty="Name" ValueProperty="Id" Label="@_localizer["ProductAttributes"]" />
</div>
}
我無法構建它,因為我收到以下錯誤:
賦值的左側必須是變數、屬性或索引器
我認為問題是我試圖傳遞它的 LINQ 查詢@bind-Value- 如果我用 just @productDto.SelectedProductTagsthen 替換它,它會為每種標簽型別構建并生成一個單獨的下拉串列,但是如果我嘗試選擇任何標簽它會失敗,大概是因為它不知道將標簽分配給哪個下拉串列。
SelectedProductTags在我的產品模型中看起來像這樣:
public virtual IEnumerable<int>? SelectedProductTags { get; set; } = new int[] { };
我正在使用 .NET 6 和 Blazor Webassembly。
uj5u.com熱心網友回復:
我在 GitHub 上創建了一個演示專案,可以解決您的問題:https ://github.com/Jimmys20/SO74219635
您必須使用手動事件系結:
@foreach (var type in tagTypesDto)
{
<div class="form-group mb-3">
var tagTypeId = type.Id;
<RadzenDropDown Data="tagsDto.Where(x => x.TagTypeId == type.Id).ToList()"
Value="productDto.SelectedProductTags"
ValueChanged="values => OnValueChanged(values, tagTypeId)"
TValue="List<int>"
Multiple="true"
ValueProperty="Id"
TextProperty="Name" />
</div>
}
@code {
private void OnValueChanged(List<int> values, int tagTypeId)
{
var data = tagsDto.Where(t => t.TagTypeId == tagTypeId).Select(t => t.Id);
productDto.SelectedProductTags.RemoveAll(x => data.Contains(x));
productDto.SelectedProductTags = productDto.SelectedProductTags.Concat(values).ToList();
}
}
SelectedProductTags需要更改為List<int>.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/529375.html
標籤:C#网林克西装外套
