TL; DR; Это похоже на то, что привязка строки / текстового поля отлично работает с элементами управления вводом, но привязка флажка, поддерживаемая логическими свойствами, не работает. Я знаю, что привязка для значений флажков должна использовать атрибут «checked» вместо атрибута «value», но Blazor должен обрабатывать это для разных типов элементов управления.
Я выполняю некоторую работу с Blazor (серверное приложение) с RC1 и не могу получить привязку логических значений к элементу управления флажком ввода. Я считаю, что используемый синтаксис правильный (см. Ниже). В качестве простого теста я создал новый проект и просто заменил страницу index.razor приведенным ниже образцом кода. Когда вы запустите его, обратите внимание:
- «Тестовое значение» для элемента управления вводом текстового поля инициализируется нормально.
- Начальное значение флажка - истина, но флажок не установлен.
- Измените текст элемента управления вводом текстового поля, а затем измените фокус элемента управления. Обратите внимание, что сообщение печатается в окне отладки на вкладке «Вывод» Visual Studio (ожидаемое поведение).
- Измените значение элемента управления вводом флажка (установите или снимите флажок), а затем измените фокус элемента управления. Обратите внимание, что в окне «Отладка» на вкладке «Вывод» Visual Studio сообщение не отображается (непредвиденное поведение).
@page "/"
<div class="form-group">
<label for="last-name">Textbox Binding Test</label>
<input @bind="TestString" type="text" class="form-control" id="last-name" placeholder="Enter Last Name" />
</div>
<div class="form-group">
<label for="send-email-updates">Checkbox Binding Test</label>
<input type="checkbox" bind="@TestBool" id="send-email-updates" />
</div>
@code {
private bool _testBool = true;
protected bool TestBool
{
get { return _testBool; }
set
{
_testBool = value;
System.Diagnostics.Debug.WriteLine($"Value of {nameof(TestBool)} = {value}");
}
}
private string _testString = "Test Value";
protected string TestString
{
get { return _testString; }
set
{
_testString = value;
System.Diagnostics.Debug.WriteLine($"Value of {nameof(TestString)} = {value}");
}
}
}
Такое поведение наблюдалось независимо от того, делались ли свойства общедоступными, использовались автоматические свойства (без частных переменных) или удалялись значения атрибута имени / идентификатора элемента управления. Кажется, это происходит независимо от того, использую ли я директиву @code на странице или отделяю модель представления, наследуемую от ComponentBase.
Суть в том, что я могу получать текстовые значения, когда пользователь отправляет форму, но все логические свойства, похоже, остаются такими, какими они были при первой инициализации.