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)

 接続はこうなった。

合ってると思う。



RasberryPi PicoをVS CODE(MicroPython)で作る

VSCode+MicorPythonでターミナルに「Hello Python」を表示できるまでをやる

(Windows10 64bit)

GPIOへのアクセスはまだやってない。

1:pico本体のBOOTSELボタン(白いの)を押しながらPC(Win10)とUSB接続

2:USBストレージとして認識されるので、中のINDEX.HTMを開いて

www.raspberrypi.org を開き、Getting startedからDownload UF2 Fileをクリックしてダウンロードする。

3:ダウンロードしたファイルをエクスプローラーで、RPI-RP2にコピーする

 (自動でUSBが切断される)

4:VS Codeをインストールする(64bit)

5:NodeJSをインストールする (x64 LTSをいれた)

6:Pythonをインストール(3.9.1 64bit)

7:VS Codeを開いて拡張機能のインストールを行い、VS Codeを再起動

  ・Python

  ・Python for VSCode

  ・Pico Go

8:適当にワークスペースを追加して、「test.py」を作成

def func():
    print("hello micro python")

func()

こんな感じのを作る

※Pythonのインタプリタどれにする?ってVSCodeの右下に出てきたら

 PythonをインストールしたフォルダのPython.exeを指定してあげればいいと思う

9:VSCodeの下部にある、ターミナルを開き「PowerShell」になってたら

 「Pico Console」をコンボボックスから選択

10:Rasberry PicoをUSBから抜いて、BOOTSELを押さずにUSBを接続する

11:ターミナルにConnection to COM...的なやつが出たら接続できてる

12:VSCodeの一番下、All Commandsから「Pico Go->Run current file」を実行


「hello micro python」

とコンソールに表示されたら

できてるんだと思う。


参考:https://qiita.com/n0bisuke/items/5fb2f1592c7bfd804015


2020年5月14日木曜日

Windows10に.NET3.5インストールで0x800F0954

WSUSのせいだそう。

レジストリを0にしてインストールするとできた。

HKLM¥SOFTWARE¥Policies¥Microsoft¥Windows¥WindowsUpdate¥AU
の
UseWUServerを0にし、再起動

インストール後に元の値に戻す