Weather.razor 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. @page "/weather"
  2. @attribute [StreamRendering]
  3. <PageTitle>Weather</PageTitle>
  4. <h1>Weather</h1>
  5. <p>This component demonstrates showing data.</p>
  6. @if (forecasts == null)
  7. {
  8. <p>
  9. <em>Loading...</em>
  10. </p>
  11. }
  12. else
  13. {
  14. <table class="table">
  15. <thead>
  16. <tr>
  17. <th>Date</th>
  18. <th>Temp. (C)</th>
  19. <th>Temp. (F)</th>
  20. <th>Summary</th>
  21. </tr>
  22. </thead>
  23. <tbody>
  24. @foreach (var forecast in forecasts)
  25. {
  26. <tr>
  27. <td>@forecast.Date.ToShortDateString()</td>
  28. <td>@forecast.TemperatureC</td>
  29. <td>@forecast.TemperatureF</td>
  30. <td>@forecast.Summary</td>
  31. </tr>
  32. }
  33. </tbody>
  34. </table>
  35. }
  36. @code {
  37. private WeatherForecast[]? forecasts;
  38. protected override async Task OnInitializedAsync()
  39. {
  40. // Simulate asynchronous loading to demonstrate streaming rendering
  41. await Task.Delay(500);
  42. var startDate = DateOnly.FromDateTime(DateTime.Now);
  43. var summaries = new[] { "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" };
  44. forecasts = Enumerable.Range(1, 5).Select(index => new WeatherForecast
  45. {
  46. Date = startDate.AddDays(index),
  47. TemperatureC = Random.Shared.Next(-20, 55),
  48. Summary = summaries[Random.Shared.Next(summaries.Length)]
  49. }).ToArray();
  50. }
  51. private class WeatherForecast
  52. {
  53. public DateOnly Date { get; set; }
  54. public int TemperatureC { get; set; }
  55. public string? Summary { get; set; }
  56. public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
  57. }
  58. }