あきちゃんの飽き飽き備忘録

ほぼ死んでるブログ

Let's BlazorServer+Radzen ♪ ④ (通知機能)

初めまして、アキちゃんです。

備忘録をかねてブログを書くことにしました。

前回でLogin画面が完了しました。

今回は通知機能の実装を作成しようと思います。

それでは早速・・・Let's BlazorServer+Radzen ♪

Lesson.1 Notificationコンポーネント

Radzenの通知機能の実装はNotificationコンポーネントを使用します。

blazor.radzen.com

Lesson.2 通知機能の導入 ♪

Shared\MainLayout.razorの上部に以下コードを追記します。

@inject NotificationService NotificationService

@code{}に以下の関数を追記します

    void ShowNotification(NotificationSeverity severity, string summary, string detail)
    {
        NotificationService.Notify(new NotificationMessage()
            {
                Severity = severity,
                Summary = summary,
                Detail = detail,
                Duration = 3000
            });
    }

Login認証を行っているif (getUser.Any())を以下のように修正します。

        if (getUser.Any())
        {
            // ユーザーが取得できたためLogin
            IsLogin = false;
            ShowNotification(NotificationSeverity.Success, "ログイン成功", "ログインに成功しました。");
        }
        else
        {
            // ユーザーが取得できなかったためNG
            ShowNotification(NotificationSeverity.Error, "ログイン失敗", "ログインに失敗しました。");
        }

ここまできたら実行して

Username:saitou Password:test

と入力しLoginを押下すると画面右上にログイン失敗のメッセージが表示され

Username:saitou Password:password

と入力しLoginを押下すると画面右上にログイン成功のメッセージが表示されると思います。

Lesson.3 あとがき ♪

それでは次回更新でまた!

github.com


Let's BlazorServer+Radzen ♪ ③ (Login画面)

初めまして、アキちゃんです。

備忘録をかねてブログを書くことにしました。

前回で公式サイトのデザインの使用が完了しました。

今回はLogin画面を作成しようと思います。

それでは早速・・・Let's BlazorServer+Radzen ♪

Lesson.1 Loginコンポーネント

RadzenのLoginコンポーネントは以下のようにサンプルがあるのでこれを使っていこうと思います。

blazor.radzen.com

本記事ではサンプルの一番下にあるシンプルな青色の画面を実装しようと思います。

Lesson.2 Login画面導入 ♪

Shared\MainLayout.razorに以下コードを追加します。

<RadzenBody style="margin-left: 0px">
    <ChildContent>
        <div class="row justify-content-center">
            <div class="justify-content-center col-xl-5 col-md-7">
                <RadzenCard class="d-flex p-0 rz-border-radius-4 rz-shadow-10 " Style="margin-top: 8rem; width: 100%; flex-direction: column; overflow: hidden; align-items: stretch;">
                    <RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-background-color-info p-5" style="text-align: center;">
                        <RadzenText TextStyle="TextStyle.DisplayH3" TagName="TagName.H2" Class="rz-color-white mb-0">Login</RadzenText>
                    </RadzenCard>
                    <RadzenCard Class="rz-shadow-0 p-5">
                       <RadzenTemplateForm Data=@("SimpleLogin")>
                            <RadzenLogin AllowRegister="false" AllowResetPassword="true" />
                        </RadzenTemplateForm>
                    </RadzenCard>
                </RadzenCard>
            </div>
        </div>
    </ChildContent>
</RadzenBody>

この状態で実行すると以下画面になると思います。

この画面だとLogin画面とMain画面が共存してしまっているのでログインが成功したらMain画面を、だめなら表示しないといった処理を追加したいです。

なのでLoginボタンの処理を追加します、ます先ほど追加したソースコードに以下の修正を加えます。

<RadzenBody style="margin-left: 0px" Visible=@IsLogin>
    <ChildContent>
        <div class="row justify-content-center">
            <div class="justify-content-center col-xl-5 col-md-7">
                <RadzenCard class="d-flex p-0 rz-border-radius-4 rz-shadow-10 " Style="margin-top: 8rem; width: 100%; flex-direction: column; overflow: hidden; align-items: stretch;">
                    <RadzenCard Class="rz-shadow-0 rz-border-radius-0 rz-background-color-info p-5" style="text-align: center;">
                        <RadzenText TextStyle="TextStyle.DisplayH3" TagName="TagName.H2" Class="rz-color-white mb-0">Login</RadzenText>
                    </RadzenCard>
                    <RadzenCard Class="rz-shadow-0 p-5">
                      <RadzenTemplateForm Data=@("SimpleLogin")>
                            <RadzenLogin AllowRegister="false" AllowResetPassword="true" Login=@(args => OnLogin(args)) />
                        </RadzenTemplateForm>
                    </RadzenCard>
                </RadzenCard>
            </div>
        </div>
    </ChildContent>
</RadzenBody>

上記のコードの直下にあるRadzenLayoutに以下のコードを加えます。

<RadzenLayout Visible=@(!IsLogin)>

ソースコード(Shared\MainLayout.razor)の一番下に以下を加えます

@code {
  bool IsLogin = true;
    void OnLogin(LoginArgs args)
    {
      IsLogin = false;
    }
}

ここまできて実行するとLogin画面が表示された後任意の適当な文字をUsernameとPasswordに入力してLoginを押すとMain画面に遷移するようになると思います。

ここまでで画面の作成は終了です。

Lesson.3 Login認証導入 ♪

Lesson.2まででLogin画面までは完成しました。

ですが、今のままだと何を入力してもログインできてしまうのでLogin可能なUser情報を取得するServiceを作ろうと思います。

まず、Data\にLoginInfo.cs、LoginInfoService.csを作成します。

追加したData\LoginInfo.csを以下のように修正します。

    public class LoginInfo
    {
        public int Id { get; set; } = -1;
        public string? UserName { get; set; } = string.Empty;
        public string? Password { get; set; } = string.Empty;
    }

追加したData\LoginInfoService.csを以下のように修正します。

    public class LoginInfoService
  {
        public Task<LoginInfo[]> GetLoginInfoAsync()
        {
            return Task.FromResult(GetLoginInfo());
        }
        LoginInfo[] GetLoginInfo()
        {
           // ここでDBと通信しユーザー情報を取得
// 今回は構造体で適当にユーザーを返す
            return new LoginInfo[3] {
                new LoginInfo() {Id = 1, UserName = "saitou", Password = "password" },
                new LoginInfo() {Id = 2, UserName = "yamada", Password = "password" },
                new LoginInfo() {Id = 3, UserName = "tanaka", Password = "password" }
            };
        }
    }

コメント部分でユーザーのデータを取得します。

実際の環境ではApiやDatabaseから社員情報を取得しますが今回は適当に架空のユーザーを作成します。

作成したServiceを使用するためにServicesに登録する必要があります、Program.csに以下コードを追加します。

builder.Services.AddSingleton<LoginInfoService>();

上記でLoginInfoServiceを使う準備ができたのでShared\MainLayout.razorに戻り以下コード

@using BlazorServerApp.Data
@inject LoginInfoService LoginInfoService

ソースコード上部の@using ...に続けて追加します。(前記の登録を含めておそらくDIのようなものだとおもいます、筆者の小さな脳みそでは理解できていないので知ってる方は是非教えて頂けると助かります)

@code{}を以下のように修正します。

@code {
    bool IsLogin = true;
    async Task OnLogin(LoginArgs args)
    {
        var allUser = await LoginInfoService.GetLoginInfoAsync();
        var getUser = allUser.Where(x => x.UserName == args.Username && x.Password == args.Password);
        if (getUser.Any())
        {
            // ユーザーが取得できたためLogin
IsLogin = false;
        }
        else
        {
            // ユーザーが取得できなかったためNG
        }
    }
}

ここまできたら実行するとさっきと同じLogin画面が表示されるとおもいます。

そこで

Username:saitou Password:test

と入力しLoginを押すと画面は変化しませんが

Username:saitou Password:password

と入力しLoginを押すと・・・

遷移できましたね!

上記の画像のように遷移が確認出来たらLogin画面の完成です!

Lesson.4 あとがき ♪

それでは次回更新でまた!

github.com

Let's BlazorServer+Radzen ♪ ② (公式サイトデザインの使用)

Radzenの更新により本記事よりもより良い方法が公式より実装されました(2023/06現在)。

以下記事にまとめましたので、今後はそちらの方法を推奨します。

akr9915.hatenablog.com

 

初めまして、アキちゃんです。

備忘録をかねてブログを書くことにしました。

前回でRadzenの導入が完了しました。

今回はRadzen公式サイトデザインを取得しようと思います。

それでは早速・・・Let's BlazorServer+Radzen ♪

Lesson.1 RadzenSDK?インストール ♪

以下のサイトよりRadzenSDK?をインストールします。

www.radzen.com

インストール後Radzenを起動すると以下画面が出るため赤枠の"new"を押下して"New Application"に移動します。

"New Application"の画面にきたら赤枠の部分を画像の通り選択、入力してCreateを押下します。この時Nameはテンプレートを反映しようとしているプロジェクト名と一緒にすれば後でリネームする手間がなくなります。

Create押下すると画面が切り替わりますが、RadzenSDKでする作業は切り替わった段階で終了なので閉じてしまって構いません。

Lesson.2 ファイルのコピー ♪

画面切り替わり後Directoryで選択、入力したパスに移動すると4つのファイルができています、そこからserver\Shared\に移動しMainLayoutと名前の付いたファイルを3つコピーします。

デザインを反映させたいプロジェクトへ移動し先ほどコピーした3つのファイルを\Shared以下に貼り付けます。

このときに"MainLayout.razor.css"が残りますがこれは消してしまって構いません。

ここまできたらいったん実行してみて、以下画面になればデザインがちゃんとコピーできていることが確認できます。

 

もしもビルドエラー等で動かない場合は恐らくnamespaceが違っている可能性が高いため確認してみてください。

Lesson.3 リンクの追加 ♪

Lesson.2の実行段階で、元々あった3つのリンクがなくなってしまっているためMainLayout.razorに追記、修正します。

        <RadzenSidebar @ref="sidebar0">
            <ChildContent>
                <RadzenPanelMenu style="height: 100%;">
                    <ChildContent>
                        <RadzenPanelMenuItem Icon="home" Text="Home" Path="/">
                        </RadzenPanelMenuItem>
                        <RadzenPanelMenuItem Icon="" Text="Counter" Path="/counter">
                        </RadzenPanelMenuItem>
                        <RadzenPanelMenuItem Icon="" Text="Fetch data" Path="/fetchdata">
                        </RadzenPanelMenuItem>
                    </ChildContent>
                </RadzenPanelMenu>
            </ChildContent>
        </RadzenSidebar>

ここまできたら実行して、下記画像のように元のリンク先が左のリストに復活していたらデザイン移し替えの完了です。

Lesson.4 あとがき ♪

それでは次回更新でまた!

github.com

 

Let's BlazorServer+Radzen ♪ ① (Radzen導入)

初めまして、アキちゃんです。

備忘録をかねてブログを書くことにしました。

本シリーズはBlazor+RadzenのWebアプリシリーズです

それでは早速・・・Let's BlazorServer+Radzen ♪ 

Lesson.1 プロジェクト作成(BlazorServerApp)

プロジェクト名は BlazorServerApp で、Blazor Server プロジェクト(.Net6)で作成します。

基本デフォルトのまま次へ押しとけば大丈夫ですが一応以下記事にまとめています。

akr9915.hatenablog.com

Lesson.2 Radzenの参照の追加

プロジェクトの作成が完了したら公式サイトのGet Startedにならって参照を追加していこうと思います。

blazor.radzen.com

Lesson.2-1 インストール

プロジェクト(P)→Nugetパッケージの管理(N)をクリックしNugetパッケージを開き参照で"Radzen"と入力し、一番上に来たRadzen.Blazorをインストールします。

Lesson.2-2 名前空間のインポート

"_Imports.razor" に "@using Radzen.Blazor"を追加します。

Lesson.2-3 テーマの追加

"Pages\_Layout.cshtml"に

<link rel="stylesheet" href="_content/Radzen.Blazor/css/material-base.css">

を追加します。

もしも、Standardなレイアウトが好みの場合は

<link rel="stylesheet" href="_content/Radzen.Blazor/css/standard-base.css">

を追加します。

Lesson.2-4 jsの追加

"Pages\_Layout.cshtml"に

<script src="_content/Radzen.Blazor/Radzen.Blazor.js"></script>

を追加します。

Lesson.2-5 コンポーネントを使う

ここは参照の追加には関係ないでいったん飛ばしコンポーネントの確認は後で試そうと思います。

Lesson.2-6 Dialog、Notification、ContextMenu、Tooltipコンポーネントを使う

ここでは使うというよりは上記4つのコンポーネントを今後使うためには、コンテナーにサービスを追加しなければいけないためその追記を行うといった形です。

使わない場合は追加しなくてもよいですがそれぞれ便利なコンポーネントなので取り敢えず追加して良いと思います。

"Program.cs"に

using Radzen;
builder.Services.AddScoped<DialogService>();
builder.Services.AddScoped<NotificationService>();
builder.Services.AddScoped<TooltipService>();
builder.Services.AddScoped<ContextMenuService>();

を追加します。

ここで一度アプリケーションをビルドして成功するか確かめてください。

Lesson.3 コンポーネントを使ってみる

ここまできたら次はコンポーネントを実際に使ってみましょう。

"Pages\Counter.razor"に

using Radzen;
<RadzenButton Click="@ButtonClicked" Text="Click me"></RadzenButton>
void ButtonClicked()
{
    currentCount++;
}

を追加します。

そして実行すると・・・

違うボタンが画面上に二つ!どっちをクリックした時もCurrent count: 0がカウントアップされると思います。

同じ表示になればRadzenの導入は完了です。

Lesson.4 あとがき

UIもスタイリッシュで更新頻度が高いことから今、最も注目しているコンポーネントの一つなのでぜひみなさんも使ってみてください

それでは次回更新でまた!

github.com

Hello C# Application ♪ ② (コンソールアプリケーション)

初めまして、アキちゃんです。

備忘録をかねてブログを書くことにしました。

前回で環境の構築が完了しました。

今回はコンソールアプリケーションを作成しようと思います。

それでは早速・・・Hello C# Application ♪ 

Lesson.1 Visual Studioの起動 ♪

少しおさらいになりますが、まずはVisual Studioを立ち上げましょう。

ウインドウ左下のWindowsマークから"V"の列にある"Visual Studio2022"をダブルクリックしてVisual Studioを起動します。

起動後"コードなしで続行(W)"を押下します。

メイン画面と共にVisual Studioが立ち上がりました。

Lesson.2 プロジェクトを作ろう ♪

表示されたメイン画面で画面左上の"ファイル(F)"→"新規作成(N)"→"プロジェクト(P)・・・"を押下します。

新しいプロジェクトの作成画面が立ち上がるため、3つの赤枠の部分を

を選択し、出てきたコンソールアプリをダブルクリックまたは選択し次へを押下します。

↓下記のような画面が出てきます、ここについては特別な理由がない限りはプロジェクト名のみの入力でよいです。

今回は"HelloConsoleApp"という名前で作成していこうと思います。

”プロジェクト名(J)"に"HelloConsoleApp"と入力し”次へ”ボタンを押下します。

フレームワーク”を選択する画面が出てきますので".NET 6.0"を選択し"作成(C)"ボタンを押下します。

少しのロードのあと画面が遷移し、メイン画面が表示されたらプロジェクトの作成の完了となります。

Lesson.3 Hello World

Lesson.2までで作成したプロジェクトでまずは実際に動かしてみましょう。

画面上部に"▶HelloConsoleApp"というボタンがあります。

これがアプリを実行するためのボタンになります。*1

これを押下してみます、すると・・・

出現したWindowにHello World!と出力されました、これでプロジェクトを作成してH実行するところまでできました!

*1 もし、このボタンがない場合、画面上部の”デバック”→”デバックの開始”からの実行することができます。

Lesson.4 あとがき

これでコンソールアプリケーションの作成ができるようになりました!

それでは次回更新でまた!

Hello C# Application ♪ ① (Visual Stadio2022)

初めまして、アキちゃんです。

備忘録をかねてブログを書くことにしました。

記念すべき初回は、まず環境を作っていこうと思います。

それでは早速・・・Hello C# Application ♪

Lesson.1 インストーラダウンロード ♪

まず何をするにしても開発環境を入手する必要があります。

悩ましいSDKの選択ですが、今後のテーマも考えてVisualStudio 2022 Communityを取得しようと思います。

下にあるリンクに移動し、"Visual Studio のダウンロード"を押下しインストーラーをダウンロードしてください。

visualstudio.microsoft.com

Lesson.2 Visual Studio インストール ♪

ダウンロードが完了したら、入手した"VisualStudioSetup.exe"をダブルクリックで起動します。*1

起動後”このアプリがデバイスに変更を加えることを許可しますか”と画面が出るのでOKを押下します。

続いて↓画面が出るので続行を押下します。

するとVisual Studio Installerの準備が始まり、続いてVisual Studio Installerが立ち上がると思います。

ここで今後開発していくための環境をインストールしていきます。

取り敢えず僕の記事では今後、コンソール、WindowsFormsを経てBlazor+RadzenでWebアプリを作ることを想定しています。

なので"ASP.NETとWeb開発"にチェックを付けてダウンロードしながらインストールを押してください。

インストールが完了したら自動でVisual Studio2022 Communityが起動します!

*1 "C:\Users\{ユーザー名}\Downloads" フォルダの直下にあります。

Lesson.3 Visual Studio2022を開いてみよう ♪

ということでインストール完了しました!

おそらく自動起動して↓の画面が立ち上がってると思います、ここでは取り敢えず"今はスキップする。"を押下しましょう。

続いて↓画面が出ますがこれも取り敢えずデフォルトのまま”Visual Studioの開始”を押下しましょう!

そして出てきた↓画面で"コードなしで続行(W)"を押下すると…

Visual Studioが立ち上がりました!これで色んなプロジェクトを作ることができます!

Lesson.4 あとがき

意外とここまで大変でした…

次回はコンソールアプリケーションを作成しようと思います!

それでは次回更新でまた!

Lesson.5 おすすめの本