Skip to content

Commit a8dd255

Browse files
authored
fix(MultiSelectGeneric): close button not work (dotnetcore#6754)
1 parent 20fba89 commit a8dd255

File tree

2 files changed

+37
-20
lines changed

2 files changed

+37
-20
lines changed

src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
if (ShowCloseButton)
2424
{
2525
<div class="multi-select-item-group">
26-
<DynamicElement TagName="span" class="multi-select-close"
26+
<DynamicElement TagName="span" class="multi-select-close" data-bb-val="@GetValueString(item)"
2727
TriggerClick="@(!IsPopover)" OnClick="() => ToggleRow(item)">
2828
<i class="@CloseButtonIcon"></i>
2929
</DynamicElement>
@@ -127,7 +127,7 @@
127127

128128
@code {
129129
RenderFragment<SelectedItem<TValue>> RenderRow => item =>
130-
@<DynamicElement OnClick="() => ToggleRow(item)" TriggerClick="@CheckCanTrigger(item)" class="@GetItemClassString(item)">
130+
@<DynamicElement OnClick="() => ToggleItem(item)" TriggerClick="@CheckCanTrigger(item)" class="@GetItemClassString(item)">
131131
<div class="multi-select-item">
132132
<div class="form-check">
133133
<input class="form-check-input" type="checkbox" disabled="@CheckCanSelect(item)" checked="@GetCheckedString(item)" />

src/BootstrapBlazor/Components/SelectGeneric/MultiSelectGeneric.razor.cs

Lines changed: 35 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -385,7 +385,7 @@ public async Task ConfirmSelectedItem(int index)
385385
var rows = Rows;
386386
if (index < rows.Count)
387387
{
388-
await ToggleRow(rows[index]);
388+
await ToggleItem(rows[index]);
389389
StateHasChanged();
390390
}
391391
}
@@ -395,28 +395,45 @@ public async Task ConfirmSelectedItem(int index)
395395
/// </summary>
396396
/// <returns></returns>
397397
[JSInvokable]
398-
public async Task ToggleRow(SelectedItem<TValue> val)
398+
public async Task ToggleRow(string val)
399399
{
400-
if (!IsDisabled)
400+
if (int.TryParse(val, out var index) && index >= 0 && index < SelectedItems.Count)
401401
{
402-
var item = SelectedItems.FirstOrDefault(i => Equals(i.Value, val.Value));
403-
if (item != null)
404-
{
405-
SelectedItems.Remove(item);
406-
}
407-
else
402+
var item = SelectedItems[index];
403+
await ToggleRow(item);
404+
}
405+
}
406+
407+
private async Task ToggleRow(SelectedItem<TValue> item)
408+
{
409+
SelectedItems.Remove(item);
410+
411+
_isToggle = true;
412+
// 更新选中值
413+
await SetValue();
414+
}
415+
416+
private string? GetValueString(SelectedItem<TValue> item) => IsPopover ? SelectedItems.IndexOf(item).ToString() : null;
417+
418+
private async Task ToggleItem(SelectedItem<TValue> val)
419+
{
420+
var item = SelectedItems.FirstOrDefault(i => Equals(i.Value, val.Value));
421+
if (item != null)
422+
{
423+
SelectedItems.Remove(item);
424+
}
425+
else
426+
{
427+
var d = Rows.FirstOrDefault(i => Equals(i.Value, val.Value));
428+
if (d != null)
408429
{
409-
var d = Rows.FirstOrDefault(i => Equals(i.Value, val.Value));
410-
if (d != null)
411-
{
412-
SelectedItems.Add(d);
413-
}
430+
SelectedItems.Add(d);
414431
}
415-
416-
_isToggle = true;
417-
// 更新选中值
418-
await SetValue();
419432
}
433+
434+
_isToggle = true;
435+
// 更新选中值
436+
await SetValue();
420437
}
421438

422439
private int _min;

0 commit comments

Comments
 (0)