@* Couverture d'un livre, avec substitut. Les URL de couverture OpenLibrary renvoient des 502 intermittents (mesuré en phase 2 : 200, 200, puis 502 sur le même ISBN). On ne valide donc JAMAIS l'URL par un appel préalable : on l'affiche, et si l'image casse, l'attribut onerror la masque et laisse apparaître le substitut qui se trouve déjà dessous. Aucun aller-retour serveur, aucun état C# à gérer. @key sur l'img : si l'URL change, Blazor recrée l'élément au lieu de réutiliser celui que le onerror a marqué comme cassé. *@
@if (!string.IsNullOrWhiteSpace(Url)) { Couverture de @Titre }
@code { [Parameter] public string? Url { get; set; } [Parameter] public string? Titre { get; set; } [Parameter] public string? Classe { get; set; } private string Initiale => string.IsNullOrWhiteSpace(Titre) ? "?" : Titre.Trim()[..1].ToUpperInvariant(); }