#c# #blazor #blazor-server-side
Вопрос:
Я использую страницу blazor на стороне сервера для отображения содержимого модели, аналогичной этой
EntityModelData int Id; string Name; Listlt;ValueEntrygt; Values; lt;divgt;@model.Namelt;/divgt; lt;divgt;@model.Property2lt;/divgt; lt;divgt;@model.Property3lt;/divgt; lt;ulgt; @foreach (var item in model.Values) { lt;ligt; @item //On click call EditValue and provide an option to modify the list item //After submission of edit the StateHasChanged() and reload of model occured , but UI is not refreshing lt;/ligt; } lt;/ulgt; [Parameter] public int DbEntryId { get; set; } private EntityModelData model; protected override async Task OnInitializedAsync() { model = await SettingsService.GetDbEntryById(DbEntryId); } async async void EditValue() { ValueEntry valModel = new ValueEntry(); valModel.prop1=..; valModel.prop2=..; valModel.prop3=..;..... bool entryStatus = await SettingsService.UpdateValue(DbEntryId,valModel); if(entryStatus) //data inserted without error { //reload model model = await SettingsService.GetDbEntryById(DbEntryId); StateHasChanged(); //BUT NO CHANGES VISIBLE IN UI } }
на странице init модель заполняется из базы данных, и значения отображаются правильно . при добавлении новых элементов в свойство Values пользовательский интерфейс перезагружается без обновления страницы , но после внесения изменений в запись значения я повторно заполняю модель из базы данных, но содержимое страницы не перезагружается и не обновляется
Комментарии:
1. что произойдет, если асинхронная пустота будет изменена на асинхронную задачу?
2. @Фрэнк никакой разницы. По-прежнему пользовательский интерфейс не обновляется , если я перезагрузлю страницу, все выглядит хорошо
3. В принципе, этого не должно было происходить, но недавно я погрузился в Blazor и столкнулся с аналогичной проблемой, которая оказалась неправильным обращением с асинхронными вызовами…. Было бы неплохо увидеть код, который вызывает редактирование по щелчку и т. Д. Возможно, вам захочется попробовать создать фиктивный обработчик асинхронного редактирования, который просто вызывает API с фиктивным изменением и устанавливает свойство модели . Изменение состояния также не должно быть необходимо
4. Я согласен с Фрэнком. У вас почти наверняка есть ожидаемый асинхронный метод,
SettingsService
который позволяетEditValue
завершить работу доmodel
обновления. Попробуйте установитьmodel
значение null перед вызовомGetDbEntryById
и посмотрите, не упадут ли вещи.5. Каждый раз, когда я вижу
async void
, что я немного умираю..