2024年2月8日木曜日

ASP.NET CORE6の発行で、重複ファイルの除外

VisualStudio2022


発行時に 同じ相対パスで同じファイル名でエラーとなった場合

プロジェクトのProperties\PublishProfilesの

FolderProfile.pubxml(発行の設定名称のpubxml)に

以下を追加した。


<ItemGroup>

  <Content Remove="appsettings.Development.json" />

  <None Include="appsettings.Development.json" />

</ItemGroup>

ASP.NET CORE6でTypeScriptを使った時の発行

VisualStudio2022

【tsconfigのconplilerOptions】
module:"es2015"
moduleRecolution:"node"

通常のビルドはtsconfig.jsonで動作する(Debug/Release)が
「発行」した時だけトランスパイルされたjsがCommonJSになってしまっていた。

この時、対象のcsprojに以下の設定をすることで解決した。

<PropertyGroup>
  <TypeScriptModuleKind>es2015</TypeScriptModuleKind>
  <TypeScriptModuleResolution>node</TypeScriptModuleResolution>
</PropertyGroup>

【参照】
https://runebook.dev/ja/docs/typescript/compiler-options-in-msbuild

2022年6月13日月曜日

ASP .NET Core(.NET6) RazorPagesでのFORMの値をクラス型でPostする

Personをクライアント側で動的に増減したいので
asp-forでbindするのではなく、idとnameを指定して
配列を受け取るようにしたい。

<ViewModel>

 public class Person

{

    public string? Name{get; set;}

    public Int32? Age{get;set;}

}


<RazorPages>

public IActionResult OnPostSave(Person[] person)
{

    //DataAnotationの実行はここで

    var success = true;

    foreach(var p in person)

    {

        success &= TryValidateModel(p);

    }

}


<cshtml>

<form id="frm" asp-route-handler="Save">

    <input id="person_Name" name="person[0].Name" type=~~ />

    <input id="person_Age" name="person[0].Age" type=~~ />

    <input id="person_Name" name="person[1].Name" type=~~ />

    <input id="person_Age" name="person[1].Age" type=~~ />

</form>


・覚えておくこと

inputタグのname属性を
OnPostSaveの引数パラメーター名 + [0からの要素番号] + .(ドット) + クラスのプロパティ名
とすること。

クライアントの検証は、$('#frm').validate().form()でできる。

2022年6月10日金曜日

ActiveReports16 .NET Core 6 RazorPagesでJSViewerを使う

・Nugetで追加

GrapeCity.ActiveReports.Aspnetcore.Viewer(16.0.2) を追加


・プロジェクトに追加

wwwroot/js/ に jsViewer.min.js

wwwroot/css/ に jsViewer.min.css

※これらは、npmで云々と記述されているが

公式からDLしたインストーラーでインストールした下記フォルダに入ってる。

~\Program Files(x86)\ActiveReportsNET16\Deployment\JSViewer


・Program.cs にレポート機能を追加を記述(青字部分)

using GrapeCity.ActiveReports.Aspnetcore.Viewer;


var builder = WebApplication.CreateBuilder(args);

~~ 略 ~~

var app = builder.Build();

~~ 略 ~~

app.UserStaticFiles();

app.UseReporting(settings =>

{
   settings.UseFileStore(new DirectoryInfo("サーバーのレポートファイルの場所"));

   settings.UseCompression = true;

});

~~ 略 ~~


・ページレポート(rdlx)を作成する

・レポートエクスプローラーのパラメータから追加する
 名前:ReportParameter1
 非表示にチェックONしておいた。
とする。

・レポートエクスプローラーのデータソースを追加
名前は適当
種類にJson Providerを指定
接続、接続文字列のタブに
「="jsondata=" & Parameters!ReportParameter1.Value」とする
赤字部分は、パラメータの名前にすること。

・データセットを追加
作成したデータソースにデータセットを追加する。
クエリに「$.[*]」を指定(これがないと、「コマンドテキストが空です。」と怒られる。
フィールドに必要な項目を追加。(名前は小文字の方がいいかも?)

・cshtmlに記述する

・jsとcssの参照を追加
<link rel="stylesheet" href="~/css/jsViewer.min.css" asp-append-version="true" />
<script src="~/js/jsViewer.min.js" asp-append-version="true"></script>

・HTML
<div id="previewcontainer"> </div>

・scriptタグの中
//elementはviewerを表示するdivのjQueryセレクタ
var viewer = GrapeCity.ActiveReports.JSViewer.create({
    element : '#previewcontainer',
    reportService: {
        url: '@(Url.Content("~/api/reporting"))'
    }
});

var jsondata = [{ "id": "1000", "name": "太郎"},{ "id": "1001", "name": "花子"}];
const  param = [
    {
        name: 'ReportParameter1',    //ページレポートのパラメータ名と一致させる
        values: [JSON.stringify(jsondata)]
    }
];
//ページレポート(rdlx)は、Program.csに指定したフォルダに入れておく

viewer.openReport("TEST.rdlx", param);


こんなもんだったと思う。

jsondataの取得部分をajaxでRazorPageにアクセスして取得。

JsonResultで返せばOK

2022年1月20日木曜日

EntityFrameworkでDBからスキャフォールディング

DBにテーブルを作る(今回はSQLServer)

NuGetパッケージを追加

・Microsoft.EntityFrameworkCore

・Microsoft.EntityFrameworkCore.Design

・Microsoft.EntityFrameworkCore.SqlServer

・Microsoft.EntityFrameworkCore.SqlServer.Design

・Microsoft.EntityFrameworkCore.Tools

Visual Studioのパッケージマネージャコンソールで以下を実行

(接続先DB等は適宜変更する)

Scaffold-DbContext -Connection "Server=localhost\SQLEXPRESS;Database=hoge;Trusted_Connection=True;" -Provider Microsoft.EntityFrameworkCore.SqlServer -UseDatabaseNames -DataAnnotations -ContextDir Datas -OutputDir Models


各パラメータは以下を参照すると良い

https://docs.microsoft.com/ja-jp/ef/core/cli/powershell

-ContextDir と -OutputDir は

Hoge\Data とか Hoge\Modelsと

してあげると、階層の下に作成できた。


Build failed になった場合

NuGet参照が足りないか

出力先にすでにDbContextファイルがあったりとか

だとエラーになった。

詳細はわからない。

2021年2月14日日曜日

RasberryPi PicoをVS CODE(MicroPython)で作る(LED点滅 ADC付き)

 ADConverterで点滅間隔を操作できるようにした。

0.1秒単位、最大1秒まで。

import machine
import utime
from machine import Pin

led = Pin(15, Pin.OUT)
adc = machine.ADC(0)

for i in range(100):
    adcVal = adc.read_u16()

    val = i % 2
    led.value(val)

    percent = int(adcVal / 65535 * 100)
    amari = percent % 10
    percent = percent - amari
    sleepTime = percent / 100

    print(adcVal, percent, sleepTime)

    utime.sleep(sleepTime)

led.value(0)

【接続】




RasberryPi PicoをVS CODE(MicroPython)で作る(LED点滅)

セットアップしたVSCodeを起動して以下のように記述した。

0.2秒ごとにLED点滅

import machine
import utime
from machine import Pin

led = Pin(15, Pin.OUT)

for i in range(100):
    val = i % 2
    led.value(val)
    utime.sleep(0.2)

led.value(0)

 接続はこうなった。

合ってると思う。