Quantcast
Channel: Active questions tagged blazor - Stack Overflow
Viewing all articles
Browse latest Browse all 4839

Blazor app not showing new information after update message via SignalR

$
0
0

I have a Blazor .net 8 Web App where I use Entity Framework Core with SQL Server. I have the following code for my view page:

view.razor.cs:

public partial class View : ComponentBase{    [Parameter]    public int DebtorId { get; set; }    private Debtor _debtor = new();    private bool DataLoading = false;    private HubConnection _hub;    protected override async Task OnInitializedAsync()    {        if (DataLoading)        {            return;        }        try        {            DataLoading = true;            await RefreshData(true);            _hub = new HubConnectionBuilder()            .WithUrl(NavigationManager.ToAbsoluteUri("/dmhub"))            .Build();            _hub.On<string, int>("CUD", (Model, Id) =>            {                if (Model == "debtor" && Id == DebtorId)                {                    InvokeAsync(() => RefreshData());                }            });            await _hub.StartAsync();        }        catch (Exception)        {            throw;        }        finally        {            DataLoading = false;        }    }    private async Task RefreshData(bool? firstrender = false)    {        _debtor = await _debtorRepos.GetSingleOrDefaultWhereIncludeAsync(x => x.Deleted == false && x.Id == DebtorId, "Contacts");        StateHasChanged();    }

Repository.cs:

public class Repository<T> : IRepository<T> where T : class{    private ApplicationDbContext _db;    public Repository(ApplicationDbContext db)    {        _db = db;    }    public async Task<T> GetSingleOrDefaultWhereIncludeAsync(Expression<Func<T, bool>> where, string include)    {        return await _db.Set<T>().Include(include).SingleOrDefaultAsync(where);    }}

View.razor:

<h1 class="">@(_debtor.Name)</h1>

Edit.razor:I use almost the same .cs file with the edit page as with the view page.

<InputText class="form-control" id="Name" @bind-Value="@_debtor.Name"></InputText>

On all my pages I use @rendermode @(new InteractiveServerRenderMode(prerender: false))

Whenever I update the name from for example "test" to "test 1 2 3", the view page receives the message correctly but still shows "test" as name. Only after I hit F5, it shows the new name. I used this same technique in my Blazor Server .net 7 application and it all worked fine there. But now, the new Debtor is only showing after I hit F5.

Anyone who knows what I am doing wrong here?


Viewing all articles
Browse latest Browse all 4839

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>