it技術:web開発:blzaor
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| it技術:web開発:blzaor [2024/01/09 18:28] – [UIフレームワーク] yajuadmin | it技術:web開発:blzaor [2024/12/24 00:42] (現在) – [Web APIを追加] yajuadmin | ||
|---|---|---|---|
| 行 117: | 行 117: | ||
| |StateHasChanged|レンダリングしたい任意のタイミング|コストが高いので不必要に呼び出さないこと| | |StateHasChanged|レンダリングしたい任意のタイミング|コストが高いので不必要に呼び出さないこと| | ||
| + | === OnParametersSet(Async)について === | ||
| + | Navigation.NavigateToで別ページに画面遷移させた時でもOnParametersSetAsyncが動作する。 | ||
| + | |||
| + | Navigation.NavigateToで別ページに画面遷移させた時に例外エラー、原因として OnParametersSetAsync処理内で発生していた。 | ||
| + | NavigateTo前に_isNextPageフラグをTrueにセットして使用して回避させた。 | ||
| + | |||
| + | <code csharp> | ||
| + | protected override async Task OnParametersSetAsync() | ||
| + | { | ||
| + | // 別ページに画面遷移する場合は何もしない。 | ||
| + | if (_isNextPage) return; | ||
| + | </ | ||
| ==== Razorコンポーネントのステート ==== | ==== Razorコンポーネントのステート ==== | ||
| [[https:// | [[https:// | ||
| 行 275: | 行 287: | ||
| </ | </ | ||
| + | ==== bindとonchangeの併用は不可 ==== | ||
| + | onchange を追加すると、Model.Procedure に値がセットされなくなる。 | ||
| + | |||
| + | <code html> | ||
| + | <BSInput InputType=" | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | === 対応 === | ||
| + | onchange イベント処理内で値をセットする。 | ||
| + | |||
| + | <code csharp> | ||
| + | private void OnProcejureChange(ChangeEventArgs e) | ||
| + | { | ||
| + | Model.Procedure = e.Value.ToString() ?? ""; | ||
| + | } | ||
| + | </ | ||
| ==== MainLayout コンポーネント側にデータを反映させる ==== | ==== MainLayout コンポーネント側にデータを反映させる ==== | ||
| カスケーディングを使用してパラメーターを渡す。 | カスケーディングを使用してパラメーターを渡す。 | ||
| 行 328: | 行 358: | ||
| public string[]? Films { get; set; } | public string[]? Films { get; set; } | ||
| </ | </ | ||
| + | |||
| + | === 通常クラス === | ||
| + | Blazorコンポーネント内では Navigation.GetUriWithQueryParametersを使用できるが、Blazorコンポーネント外の一般クラスでは、HttpUtility.ParseQueryString を使用する。 | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | === Uriからパラメータ取得 === | ||
| + | < | ||
| + | NameValueCollection query = HttpUtility.ParseQueryString(new Uri(Navigation.Uri).Query); | ||
| + | string key = query[" | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| === 参照 === | === 参照 === | ||
| 行 392: | 行 435: | ||
| - Controllerフォルダを作成 | - Controllerフォルダを作成 | ||
| - | - 右クリックメニューから[追加]の[コントローラー]をクリックする | + | - 右クリックメニューから[新しい項目の追加]をクリックする |
| - 共通のAPIにある「読み取り/ | - 共通のAPIにある「読み取り/ | ||
| - ValuesController.cs を追加する | - ValuesController.cs を追加する | ||
| 行 446: | 行 489: | ||
| } | } | ||
| </ | </ | ||
| + | |||
| + | ==== カスタムコンポーネントのbind-value ==== | ||
| + | bind-value を指定したたけでは、" | ||
| + | そのため、ParameterにValueChangedを定義する。 | ||
| + | |||
| + | <code csharp Index.razor> | ||
| + | < | ||
| + | |||
| + | @code { | ||
| + | public string InputValue = " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | <code csharp CustomInput.razor> | ||
| + | <input value=" | ||
| + | < | ||
| + | |||
| + | @code { | ||
| + | [Parameter] | ||
| + | public string? Value { get; set; } | ||
| + | |||
| + | [Parameter] | ||
| + | public EventCallback< | ||
| + | private async Task OnInputChange(ChangeEventArgs args ) | ||
| + | { | ||
| + | Value = (string? | ||
| + | await ValueChanged.InvokeAsync(Value); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== カスタムコンポーネントで親コンポーネントの処理を実行 ==== | ||
| + | カスタムコンポーネントのOnClickCallbackパラメータに親側の実行処理を記載する。\\ | ||
| + | カスタムコンポーネント側のボタンをクリックすると親側の処理が実行される。 | ||
| + | |||
| + | <code csharp> | ||
| + | // イベント処理をラムダ式で書いた場合 | ||
| + | < | ||
| + | |||
| + | @code { | ||
| + | [Parameter] | ||
| + | public EventCallback OnClickCallback { get; set; } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== 子コンポーネントのメソッドを実行 ==== | ||
| + | 親コンポーネント内で子コンポーネントを@refを用いて参照することでメソッドを呼ぶことが出来る。 | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== リトライ回数を増やす ==== | ||
| + | リトライ回数はデフォルトで8回となっている。 | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== awaitのメソッドを追加すると動作しなくなる ==== | ||
| + | Submitの先頭にawait.Task.Delay メソッドを実行すると、エラー用のメッセージモーダルが表示されなくなる現象があった。\\ | ||
| + | async void を async Task に変更することで解決した。 | ||
| + | |||
| + | < | ||
| + | async void Submit() | ||
| + | ↓ | ||
| + | async Task Submit() | ||
| + | </ | ||
| + | |||
| + | [[https:// | ||
| + | ==== Javascriptとの連携 ==== | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ==== BlazorとjQueryコンポーネント等との連携 ==== | ||
| + | jQueryコンポーネント または jQueryを使用しないJavaScriptコンポーネントをBlazorと連携する場合の注意点 | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | #13732]] | ||
| + | * [[https:// | ||
| + | |||
| + | 下記のようにすれば、onchangeイベントを呼ぶことが出来る。この方法だと DotNet.invokeMethodAsync を使わずに済む。 | ||
| + | |||
| + | <code javascript combotree.js> | ||
| + | $("# | ||
| + | var myElement = $(this)[0]; | ||
| + | var event = new Event(' | ||
| + | myElement.dispatchEvent(event); | ||
| + | console.log(" | ||
| + | }); | ||
| + | </ | ||
| + | |||
| + | <code csharp combotree.razor.cs> | ||
| + | <input type=" | ||
| + | |||
| + | private void OnChange(ChangeEventArgs e) | ||
| + | { | ||
| + | if (_comboTree != null || e.Value != null) | ||
| + | { | ||
| + | Console.WriteLine(e.Value); | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | === @ref 属性による弊害 === | ||
| + | inputタグに @ref 属性を付けて、 @ref=" | ||
| + | |||
| + | <code csharp> | ||
| + | _comboTree = await _jsClass.InvokeAsync< | ||
| + | </ | ||
| + | |||
| + | <code javascript> | ||
| + | createComboTree(element, | ||
| + | this.combo = $(element).comboTree(Options); | ||
| + | </ | ||
| + | |||
| + | @ref 属性ではなく、一般的なid属性の使用に切り替えることで例外エラーが発生しなくなった。 | ||
| + | |||
| + | <code csharp> | ||
| + | _comboTree = await _jsClass.InvokeAsync< | ||
| + | </ | ||
| + | |||
| + | === nullを変換できない場合 === | ||
| + | Datetimepicker(tempusdominus)のv6を使用した際に、範囲最小値(minDate)と範囲最大値(maxDate)の指定でminDate側にnullをセットして実行した段階で、nullに変換できないとしてエラーとなった。 | ||
| + | |||
| + | null 値のプロパティを無視する属性を付けることで回避できた。\\ | ||
| + | [[https:// | ||
| + | |||
| + | < | ||
| + | private class Restrictions | ||
| + | { | ||
| + | [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] | ||
| + | public DateTime? minDate { get; set; } | ||
| + | [JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] | ||
| + | public DateTime? maxDate { get; set; } | ||
| + | } | ||
| + | </ | ||
| + | |||
| ==== ログ出力にlog4netを使用する ==== | ==== ログ出力にlog4netを使用する ==== | ||
| 行 475: | 行 661: | ||
| </ | </ | ||
| </ | </ | ||
| + | |||
| + | ==== デバッグ詳細 ==== | ||
| + | an unhandled exception on the current circuit のエラーの場合、詳細エラーを出力 | ||
| + | |||
| + | https:// | ||
| + | |||
| + | <code json appsettings, | ||
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | }, | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== ブラウザのキャッシュ回避 ==== | ||
| + | Blazorには、ASP.NET Coreにあった「asp-append-version=" | ||
| + | [[https:// | ||
| + | |||
| + | よって、ファイルバージョンを付けて回避している。 | ||
| + | |||
| + | <code csharp App.razor> | ||
| + | <link rel=" | ||
| + | |||
| + | @code { | ||
| + | private string Version = " | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ==== WebSocketプロトコルを使用する ==== | ||
| + | | ||
| + | |||
| + | >Blazor Server は、WebSocket では通信できない環境であっても、Long Polling 方式に動作を切り替えて、動作継続します。 | ||
| + | > | ||
| + | |||
| + | <wrap em> | ||
| + | |||
| + | ==== CA1416警告 Windowsでのみサポートされています ==== | ||
| + | 「警告 CA1416 この呼び出しサイトはすべてのプラットフォームで到達可能です。' | ||
| + | |||
| + | FreeSprire.pdf の印刷機能でカスタムサイズをセットした部分で警告の緑色の波線が出ました。\\ | ||
| + | 使用するメソッドの上に「[SupportedOSPlatform(" | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | ==== PrivateObjectの代替 ==== | ||
| + | 単体テストでモジュールのPrivateメソッドにアクセスする「PrivateObject」が、.NET Coreでは使用できなくなった。\\ | ||
| + | [[https:// | ||
| + | |||
| + | ==== 警告「via WebSockets, using the Long Polling fallback transport」 ==== | ||
| + | via WebSockets, using the Long Polling fallback transport. This may be due to a VPN or proxy blocking the connection. To troubleshoot this, visit | ||
| + | |||
| + | IISでWebSocketを有効にしていないとLong pollingが使用される。 | ||
| + | |||
| + | Windows Serverのサーバーマネージャーのメニューの「管理」にある「役割と機能の追加」にて、Webサーバー(IIS) | ||
| + | -> | ||
| + | |||
| + | WebSocket プロトコルにチェックを追加する。 | ||
| ===== 参照 ===== | ===== 参照 ===== | ||
| * [[https:// | * [[https:// | ||
it技術/web開発/blzaor.1704792496.txt.gz · 最終更新: 2024/01/09 18:28 by yajuadmin
