на стороне сервера blazor обновите содержимое страницы после перезагрузки модели

#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 , что я немного умираю..