Привет,
Я только что испытал странный опыт с обновлением дерева DOM в Blazor.
Код прост:
1) пользователь может выбрать между 2 типами A или B с радиокнопками.
2) при выборе A или B в качестве флажков отображаются дополнительные параметры (A позволяет выбирать A1 и / или A2, B позволяет выбирать B1 и / или B2) .
Большой вопрос: что произойдет, если вы сделаете следующее:
3) выберите A (=> появятся два флажка A1 и A2)
4) проверьте A1
5) выберите B (=> A1 и A2 vani sh, появятся флажки B1 и B2)
6) посмотрите состояние B1
, которое я сделал 2 разные версии:
7) одна, где я определяю флажки для A и B отдельно -> это работает как задумано (= B1 и B2 не отмечены)
8) одна, где я их определяю напрямую, но с правильным именем -> это не работает! B1 проверен!
Насколько я понимаю, при выборе B (шаг 5), Blazor обновляет дерево DOM. Но я не понимаю, почему браузер запоминает флажок B1 как проверенный, только потому, что я проверил A1, и хотя я создал его совершенно новым. Это похоже на ошибку для меня. Я имею в виду, я даже даю чекбоксу другое имя.
Есть ли возможность "очистить память браузера относительно состояния проверки чекбокса" или что-то еще?
Я создал этот минимум Пример для простоты. В моем коде флажки созданы в foreach, и у меня также есть непреднамеренное поведение.
Рад услышать ваше мнение и / или подсказки. Тим
Вот код моего бритвенного компонента:
<!-- Define 2 Radio-Buttons, User selects A or B -->
<label>
<input type="radio" name="RB_Type" @onclick="@(() => SelectType("A"))" /> Type A
</label>
<br />
<label>
<input type="radio" name="RB_Type" @onclick="@(() => SelectType("B"))" /> Type B
</label>
<br />
<!-- The following code works as intended -->
@if (accType == "A")
{
<input type="checkbox" name="A1" unchecked><label>A1</label>
<br />
<input type="checkbox" name="A2" unchecked><label>A2</label>
<br />
}
else if (accType == "B")
{
<input type="checkbox" name="B1" unchecked><label>B1</label>
<br />
<input type="checkbox" name="B2" unchecked><label>B2</label>
<br />
}
<!-- The following code does not work as intended -->
@if (accType != "")
{
<input type="checkbox" name="@(accType + "1")" unchecked><label>@(accType + "1")</label>
<br />
<input type="checkbox" name="@(accType + "2")" unchecked><label>@(accType + "2")</label>
<br />
}
@code {
private string accType = "";
private void SelectType(string type)
{
this.accType = type;
StateHasChanged();
}
}