==ASP.NET Core==
[[C#][ASP.NET][Razor]]
{{amazon|B078CXYZ6L}}
{
:
app.UseMvc(routes =>>
{
routes.MapRoute(
}
<<h2>>Greet<</h2>>
<<p>>@ViewBag.Message<</p>>
=====Razor構文=====
{|class="wikitable"
{
// コンストラクタ
public MyContext(DbContextOptions<<MyContext> > options) : base(options)
{
}
// モデルクラスへのアクセッサ
public DbSet<<Book> > Book { get; set; }
}
}
=====コンテキストである条件=====
*DbContextを継承
*DbContextOptions<<TContext>>を受け取るコンストラクタを持つ*DbSet<<TModel>>型のpublicプロパティを持つ
=====appsettings.json=====
// コンテキストクラスを登録
services.AddDbContext<<MyContext>>( options => > options.UseSqlServer(Configuration.GetConnectionString("MyContext")));
}
}
=====マイグレーション=====
*NuGetパッケージマネージャーコンソール
PM> > Install-Package Microsoft.EntityFrameworkCore.Tools PM> > Add-Migration Initial PM> > Update-Database
*SQLServerオブジェクトエクスプローラーで確認
[[File:0251_dnet_sqlsrv.jpg]]
}
====テンプレートの追加====
[[Razor]]
*上記手順でビューを追加
@model IEnumerable<<QuickMaster.Models.Book>>
@{
ViewData["Title"] = "List";
}
<<h2>>List<</h2>>
<<table class="table">> <<thead><><tr><><th>>Title<</th><><th>>Price<</th><><th>>Publisher<</th><><th>>Sample<</th><></tr><></thead>> <<tbody>>
@* Bookを出力 *@
@foreach (var item in Model)
{
<<tr>> <<td>>@item.Title<</td>> <<td>>@item.Price<</td>> <<td>>@item.Publisher<</td>> <<td>>@item.Sample<</td>> <</tr>>
}
<</tbody>> <</table>>
*View()にモデルを渡した場合、@modelディレクティブで型を宣言することで型キャストなどの手間を省ける
====実行====
=====プロパティをそのまま表示=====
@model.Title
=====model => > model.プロパティ名とすることでデータ型に応じて適切な形式で出力=====
**bool型ではチェックボックス
**EmailAddress/Url型ではハイパーリンク
@Html.DisplayNameFor(model => > model.Title)
=====モデルアトリビュート=====
*モデルに表示名を定義
=====テンプレート=====
*プロパティの表示名を出力
<<thead>> <<tr>> <<th>> @Html.DisplayNameFor(model => > model.Title) <</th>> <<th>> @Html.DisplayNameFor(model => > model.Price) <</th>> <<th>> @Html.DisplayNameFor(model => > model.Publisher) <</th>> <<th>> @Html.DisplayNameFor(model => > model.Sample) <</th>> <</tr>> <</thead>>
=====表示名が表示される=====
[[File:0243_display_name.jpg]]
=====ハイパーリンクを生成=====
*Editアクションに対して、idパラメータとして@item.Id を渡すリンクを作成させる
<<a asp-action="Edit" asp-route-id="@item.Id">>Edit<</a>>
*以下のようなHTMLが生成される
<<a href="/Books/Edit/1">>Edit<</a>>
===Htmlヘルパー===
*https://tokkan.net/csharp/asp3.html
*TextArea
*TextAreaFor
@Html.TextAreaFor(model=>>model.SomeMulitiLineText, new {@style="max-width:100%; width:80%", rows=34})
===アクション===
====モデルバインド====
// GET: Books/Details/5
public async Task<<IActionResult> > Details(int? id)
{ ... }
====フォームの生成====
*<<form>>にasp-action属性を付与することで、指定したアクションをポスト先とするフォームを生成できる <<form asp-action="Edit">> <<div asp-validation-summary="ModelOnly" class="text-danger"><></div>> <<input type="hidden" asp-for="Id" />> <<div class="form-group">> <<label asp-for="Title" class="control-label"><></label>> <<input asp-for="Title" class="form-control" />> <<span asp-validation-for="Title" class="text-danger"><></span>> <</div>>
:
<</form>>
*以下のようなHTMLに展開される
<<form action="/Books/Edit/1" method="post">> <<input type="hidden" data-val="true" data-val-required="The Id field is required." id="Id" name="Id" value="1" />> <<div class="form-group">> <<label class="control-label" for="Title">>書名<</label>> <<input class="form-control" type="text" id="Title" name="Title" value="TITLE-AA" />> <<span class="text-danger field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"><></span>> <</div>>
:
<</form>>
====アクションの処理====
==バンドル==
*変換ファイルのルート要素の開始タグで、XML-Document-Transform 名前空間を指定する
<<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">>
*以下の例では、"SetAttributes" 変換により、値が "MyDB" の属性 "name" を "Match" ロケーターが検出した場合にのみ "connectionString" の値に"ReleaseSQLServer" を使用するよう変更されます
<<connectionStrings>> <<add name="MyDB"
connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>> <</connectionStrings>>*以下の例では、"Replace" 変換により Web.config ファイルの <<customErrors> > セクション全体が置換されます。 <<customErrors defaultRedirect="GenericError.htm" mode="RemoteOnly" xdt:Transform="Replace">> <<error statusCode="500" redirect="InternalError.htm"/>> <</customErrors>>