Blazor Server 画面間で使う共通のメソッドは、staticクラス、staticメソッドとして実装し、共通部品用のフォルダに纏めるのが基本です。
staticクラス、staticメソッドで実装した共通処理を、2画面から使用するサンプルを作りました。
ソースコードはGitHubで公開しています。
ソースコード構成
ソースコード変更内容を解説
Common/TimeCommon.cs
・全画面から使用できるように、staticクラスで実装した共通処理を、共通処理を纏めるCommonフォルダに追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace WebApplication1.Common { public static class TimeCommon { /// <summary> /// ニューヨークの日時 /// </summary> public static int ニューヨークとの時差(DateTime dateTime) { return (GetTimeNewyork(dateTime) - GetTimeTokyo(dateTime)).Hours; } /// <summary> /// ニューヨークの日時 /// </summary> public static DateTime GetTimeNewyork(DateTime dateTime) { return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")); } /// <summary> /// 東京の日時 /// </summary> public static DateTime GetTimeTokyo(DateTime dateTime) { return TimeZoneInfo.ConvertTimeFromUtc(dateTime, TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")); } } } |
_Imports.razor
・Commonフォルダの参照を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
@using System.Net.Http @using Microsoft.AspNetCore.Authorization @using Microsoft.AspNetCore.Components.Authorization @using Microsoft.AspNetCore.Components.Forms @using Microsoft.AspNetCore.Components.Routing @using Microsoft.AspNetCore.Components.Web @using Microsoft.AspNetCore.Components.Web.Virtualization @using Microsoft.JSInterop @using WebApplication1 @using WebApplication1.Common @using WebApplication1.Shared |
Pages/Counter.razor
・Counter画面に、static共通処理を使用する項目を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
@page "/counter" <h1>Counter</h1> <p>Current count: @currentCount</p> <p>ニューヨークとの時差: @時差 時間</p> <button class="btn btn-primary" @onclick="IncrementCount">Click me</button> @code { private int currentCount = 0; private int 時差 = 0; private void IncrementCount() { currentCount++; 時差 = TimeCommon.ニューヨークとの時差(DateTime.UtcNow); } } |
Pages/FetchData.razor
・FetchData画面に、static共通処理を使用する項目を追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
@page "/fetchdata" @using WebApplication1.Data @inject WeatherForecastService ForecastService <h1>Weather forecast</h1> <p>ニューヨークとの時差: @時差 時間</p> <p>This component demonstrates fetching data from a service.</p> @if (forecasts == null) { <p><em>Loading...</em></p> } else { <table class="table"> <thead> <tr> <th>Date</th> <th>Temp. (C)</th> <th>Temp. (F)</th> <th>Summary</th> </tr> </thead> <tbody> @foreach (var forecast in forecasts) { <tr> <td>@forecast.Date.ToShortDateString()</td> <td>@forecast.TemperatureC</td> <td>@forecast.TemperatureF</td> <td>@forecast.Summary</td> </tr> } </tbody> </table> } @code { private WeatherForecast[] forecasts; private int 時差 = 0; protected override async Task OnInitializedAsync() { forecasts = await ForecastService.GetForecastAsync(DateTime.Now); 時差 = TimeCommon.ニューヨークとの時差(DateTime.UtcNow); } } |
コメント