WebSurfer's Home

Filter by APML

GridView, ListView でデータがない時もヘッダを表示

by WebSurfer 18. March 2026 18:21

ASP.NET Web Forms アプリの GirdView、ListView で、レコードが格納されてないデータソースがバインドされた時も、下の画像のようにヘッダ行を表示する方法を備忘録として書いておきます (デフォルトでは表示されません)。

GridView, ListView でデータがない時もヘッダを表示

以下に GridView と ListView のそれぞれの場合について書きます。上の画像を表示するのに使ったコードをこの記事の下の方に載せておきますのでそちらも参考にしてください。

(1) GridView

SqlDataSource のようなデータソースコントロールと組み合わせて使っていて、SqlDataSource がデータベースに SELECT クエリを投げても WHERE 句の条件が一致しないなどの理由でレコードを取得できない場合を考えます。

レコードを取得できなくても、SqlDataSource は空のデータソースを生成し、自動的にそれを GridView にデータバインドします。その場合は以下のように設定すれば上の画像のように表示されます。

データソースコントロールを使わないで自力でコードを書いて DataTable や List<T> を作成し、それを GridView の DataSource プロパティに設定して DataBind メソッドでバインドしている場合、ヘッダを表示するには空のデータソースを作ってバインドする必要がありますので注意してください。上の画像の GridView2 がそれで、コードはこの記事の下の方に載せましたので見てください。


(2) ListView

ListView には GridView の EmptyDataText のような便利なプロパティは存在しません。ListView.EmptyDataTemplate プロパティにデータが空の時表示したい html コードを書きます。

Visual Studio のデザイナを使って ListView のコードを生成させると、そのコードには EmptyDataTemplate が含まれるはずです。その中にヘッダと No data was returned. というメッセージ行の html コードを書いた結果が上の ListView の画像です。そのコードは下に載せましたので見てください。


上の画像を表示したコードは以下の通りです。

.aspx.cs

using System;
using System.Collections.Generic;

namespace WebForms1
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                // GridView2 はデータソースコントロールを使わない
                var data = new List<Hotel>();
                GridView2.DataSource = data;
                GridView2.DataBind();
            }
        }
    }

    public class Hotel
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public decimal RoomCharge { get; set; }
    }
}

.aspx

<%@ Page Language="C#" AutoEventWireup="true"
    CodeBehind="WebForm2.aspx.cs"
    Inherits="WebForms1.WebForm2" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        table.style1 {
            border-style: solid;
            border-width: 2px;
            border-color: Silver;
            border-collapse: collapse;
        }

            table.style1 th {
                border-style: solid;
                border-width: 2px 1px 2px 1px;
                border-color: Silver;
                padding: 5px 8px;
                background-color: #6699FF;
                color: #FFFFFF;
            }

            table.style1 td {
                border-style: solid;
                border-width: 1px;
                border-color: Silver;
                padding: 2px 8px;
            }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <asp:SqlDataSource ID="SqlDataSource1" runat="server"
            ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>"
            ProviderName="<%$ ConnectionStrings:NorthwindConnectionString.ProviderName %>"
            SelectCommand="SELECT [CustomerID], [CompanyName], [Address], [City], 
                    [PostalCode], [Country] FROM [Customers] WHERE CustomerID='NoID'">
        </asp:SqlDataSource>

        <h3>GirdView</h3>

        <asp:GridView ID="GridView1" runat="server"
            AutoGenerateColumns="False"
            DataKeyNames="CustomerID"
            ShowHeaderWhenEmpty="True"
            DataSourceID="SqlDataSource1"
            EmptyDataText="No data was returned.">
            <Columns>
                <asp:BoundField DataField="CustomerID" HeaderText="CustomerID"
                    ReadOnly="True" SortExpression="CustomerID" />
                <asp:BoundField DataField="CompanyName" HeaderText="CompanyName"
                    SortExpression="CompanyName" />
                <asp:BoundField DataField="Address" HeaderText="Address"
                    SortExpression="Address" />
                <asp:BoundField DataField="City" HeaderText="City"
                    SortExpression="City" />
                <asp:BoundField DataField="PostalCode" HeaderText="PostalCode"
                    SortExpression="PostalCode" />
                <asp:BoundField DataField="Country" HeaderText="Country"
                    SortExpression="Country" />
            </Columns>
        </asp:GridView>

        <h3>GridView2</h3>
        <asp:GridView ID="GridView2" runat="server" 
            EmptyDataText="No data was returned." 
            ShowHeaderWhenEmpty="True"></asp:GridView>

        <h3>ListView</h3>

        <asp:ListView ID="ListView1" runat="server"
            DataKeyNames="CustomerID"
            DataSourceID="SqlDataSource1">
            <EmptyDataTemplate>
                <table class="style1">
                    <tr>
                        <th>CustomerID</th>
                        <th>CompanyName</th>
                        <th>Address</th>
                        <th>City</th>
                        <th>PostalCode</th>
                        <th>Country</th>
                    </tr>
                    <tr>
                        <td colspan="6">No data was returned.</td>
                    </tr>
                </table>
            </EmptyDataTemplate>
            <ItemTemplate>
                <tr style="">
                    <td>
                        <asp:Label ID="CustomerIDLabel" runat="server"
                            Text='<%# Eval("CustomerID") %>' />
                    </td>
                    <td>
                        <asp:Label ID="CompanyNameLabel" runat="server"
                            Text='<%# Eval("CompanyName") %>' />
                    </td>
                    <td>
                        <asp:Label ID="AddressLabel" runat="server"
                            Text='<%# Eval("Address") %>' />
                    </td>
                    <td>
                        <asp:Label ID="CityLabel" runat="server"
                            Text='<%# Eval("City") %>' />
                    </td>
                    <td>
                        <asp:Label ID="PostalCodeLabel" runat="server"
                            Text='<%# Eval("PostalCode") %>' />
                    </td>
                    <td>
                        <asp:Label ID="CountryLabel" runat="server"
                            Text='<%# Eval("Country") %>' />
                    </td>
                </tr>
            </ItemTemplate>
            <LayoutTemplate>
                <table id="itemPlaceholderContainer" runat="server" class="style1">
                    <tr runat="server" style="">
                        <th runat="server">CustomerID</th>
                        <th runat="server">CompanyName</th>
                        <th runat="server">Address</th>
                        <th runat="server">City</th>
                        <th runat="server">PostalCode</th>
                        <th runat="server">Country</th>
                    </tr>
                    <tr id="itemPlaceholder" runat="server">
                    </tr>
                </table>
            </LayoutTemplate>
        </asp:ListView>
    </form>
</body>
</html>

Tags: , , ,

ASP.NET

ASP.NET Core Razor Pages の IdFor と NameFor

by WebSurfer 13. March 2026 14:50

ASP.NET Core Razor Pages アプリで Html Helper の EditorFor や Tag Helper の input などを使用すると、ASP.NET がそれらから html の input 要素を生成する際、自動的に id 属性と name 属性を生成して id="id 名" name="name 名;" というように input 要素に追加します。その「id 名」や「name 名」をサーバー側で取得する方法を書きます。

id 名、name 名の取得

先の記事「Control.ClientID と Html.IdFor」で書いた .NET Framework 版の MVC アプリとほぼ同じ話ですが、.NET 10 の ASP.NET Core Razor Pages で改めて調べてみましたので、それをこの記事に書いておくことにしました。

JavaScript を使ってそれらの要素を操作する場合 (例えばイベントにリスナーをアタッチするとか)、getElementById("id 名") を使って「id 名」に一致する html 要素を取得するということが行われます。

ASP.NET が生成する「id 名」をサーバー側で取得するには Html Helper の IdFor メソッドを利用します。「name 名」を取得する場合は NameFor メソッドが利用できます。

この記事の上の画像に id: Parent_Children_0__Name, name: Parent.Children[0].Name というように表示されていますが、それがその直上の input 要素(テキストボックス)に ASP.NET が追加した id 属性と name 属性の値です。

上の画像を表示した Razor Pages アプリのコードは以下の通りです。

Model

using System.ComponentModel.DataAnnotations;

namespace RazorPages.Models
{
    public class Parent
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "{0} is required")]
        [StringLength(5, ErrorMessage = "{0} must be within {1} characters")]
        [Display(Name = "Parent Name")]
        public string? Name { get; set; }

        public IList<Child>? Children { get; set; }
    }

    public class Child
    {
        public int Id { get; set; }

        [Required(ErrorMessage = "{0} is required")]
        [StringLength(5, ErrorMessage = "{0} must be within {1} characters")]
        [Display(Name = "Child Name")]
        public string? Name { get; set; }

        public Parent? Parent { get; set; }
    }
}

.cshtml.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorPages.Models;

namespace RazorPages.Pages
{
    public class IdForModel : PageModel
    {
        public void OnGet()
        {
            var model = new Parent
            {
                Id = 1,
                Name = "Parent1",
                Children = new List<Child>
                {
                    new Child { Id = 1, Name = "Child1" },
                    new Child { Id = 2, Name = "Child2" }
                }
            };

            Parent = model;
        }

        [BindProperty]
        public Parent? Parent { get; set; }
    }

.cshtml

@page
@model RazorPages.Pages.IdForModel

<h3>Html Helper</h3>
@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.Parent!.Name)
    @Html.EditorFor(m => m.Parent!.Name)
    @Html.ValidationMessageFor(m => m.Parent!.Name)
    <br />
    
    for (int i = 0; i < Model.Parent!.Children!.Count; i++)
    {
        @Html.LabelFor(m => m.Parent!.Children![i].Name)
        @Html.EditorFor(m => m.Parent!.Children![i].Name)
        @Html.ValidationMessageFor(m => m.Parent!.Children![i].Name)
        <br />
        <span>
            id: @Html.IdFor(m => m.Parent!.Children![i].Name), 
            name: @Html.NameFor(m => m.Parent!.Children![i].Name)
        </span>
        <br />
    }
}
<br />
<h3>Tag Helper</h3>
<form method="post">
    <label asp-for="Parent.Name"></label>
    <input asp-for="Parent.Name"/>
    <span asp-validation-for="Parent.Name"></span>
    <br />
    
    @for (int i = 0; i < Model.Parent!.Children!.Count; i++)
    {
        <label asp-for="Parent!.Children![i].Name"></label>
        <input asp-for="Parent!.Children![i].Name" />
        <span asp-validation-for="Parent!.Children![i].Name"></span>
        <br />
        <span>
            id: @Html.IdFor(m => m.Parent!.Children![i].Name),
            name: @Html.NameFor(m => m.Parent!.Children![i].Name)
        </span>
        <br />
    }                    
</form>

例えば、上の Tag Helper のコード

<label asp-for="Parent!.Children![i].Name"></label>
<input asp-for="Parent!.Children![i].Name" />
<span asp-validation-for="Parent!.Children![i].Name"></span>

から ASP.NET が生成する html ソースは、i が 0 の場合、以下のようになります。Html Helper の場合もほぼ同じです。

<label for="Parent_Children_0__Name">Child Name</label>
<input type="text" data-val="true" 
  data-val-length="Child Name must be within 5 characters" 
  data-val-length-max="5" 
  data-val-required="Child Name is required" 
  id="Parent_Children_0__Name" 
  maxlength="5" 
  name="Parent.Children[0].Name" 
  value="Child1" />
<span class="field-validation-valid" 
  data-valmsg-for="Parent.Children[0].Name" 
  data-valmsg-replace="true"></span>

ASP.NET が自動的に生成して input 要素に追加する id 属性や name 属性の値はかなり複雑になるのが分かりますでしょうか? コレクションを扱うということで複雑になる例ではありますが、こういうケースは実際にあります。

html ソースを見れば ASP.NET が作成した「id 名」や「name 名」は分かりますが、それをスクリプトにハードコーディングするというのは避けた方が良さそうです。命名規則が変るかもしれないとか、ASP.NET Web Forms アプリのように使う場所によって変わるということがあるかもしれませんので。

ではどうするかというと、例えば、上の input 要素を JavaScript の getElementById で取得したい場合は、.cshtml ページ内でインラインスクリプトを書く場合ですが、以下のようにして取得できます。

@section scripts {
    <script>
        let element = document.getElementById('@Html.IdFor(m => m.Parent!.Children![0].Name)');
        console.log(element.value);

        // 結果は Child1
    </script>
}

以上は ASP.NET Core Razor Pages の場合です。MVC の場合も同じだと思いますが、未確認・未検証です。

Tags: , , ,

CORE

ASP.NET Core Razor Pages で Bootstrap Modal の利用

by WebSurfer 20. February 2026 15:09

データーベースのテーブルの CRUD を行う ASP.NET Core Razor Pages アプリで、ユーザーがデータベースのレコードを削除する際、当該レコードの内容を Bootstrap Modal に表示してユーザーに確認を促し、確認後 Modal 上の [Delete] ボタンをクリックするとデータベースのレコードを削除する方法を紹介します。

Index ページでの一覧表示

ベースとしたアプリは Visual Studio 2026 のテンプレートを利用してターゲットフレームワーク .NET 10.0 で作成した Microsoft のチュートリアル「チュートリアル: ASP.NET Core の Razor Pages の概要」のものとほぼ同じで、SQL Server の Movie テーブルの CRUD を行うコードをスキャフォールディング機能を利用して自動生成させたものです。

スキャフォールディング機能を使って実装したコードでは、上の画像の Index ページに一覧表示されている各項目の右横の [Delete] リンクをクリックすると、別ページ Delete に遷移し、遷移した Delete ページ上の [Delete] ボタンをクリックすると SQL Server の Movie テーブルの当該レコードを削除した後 Index ページにリダイレクトされ、削除後の一覧を表示するようになっています。

それを、別ページ Details に遷移しないで、Index ページで下の画像のように Bootstrap Modal 内に削除するレコードの詳細を表示し、ユーザーが確認後 Bootstrap Modal 上の [Delete] ボタンを押すとレコードを削除し、Index ページにリダイレクトして削除後の一覧を表示するようにします。

削除前に Bootstrap Modal で内容を確認

ポイントは、

  • Index ページ上の [Delete] リンクをクリックした時、当該レコードのデータを JavaScript の fetch で取得し、それを Index ページ上で Bootstrap Modal に表示するにはどうするか?
  • Bootstrap Modal 上の [Delete] ボタンをクリックした時、当該レコードを SQL Server の Movie テーブルから削除し、削除後のレコード一覧を Index ページに表示するにはどうするか?

・・・の 2 点です。それを以下に述べます。

Index.cshtml.cs

まず Index.cshtml.cs ですが、スキャフォールディングにより自動生成されたコードに、指定された id のレコード詳細を Bootstrap Modal 内に表示するための部分ビューを返すハンドラ OnGetDetailsAsync と、指定された id のレコードを Movie テーブルから削除するハンドラ OnPostDeleteAsync を追加します。コードは以下の通りです。

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using RazorPages.Models;
using RazorPages.Data;

namespace RazorPages.Pages.Movies
{
    public class IndexModel : PageModel
    {
        private readonly TestDatabaseContext _context;

        public IndexModel(TestDatabaseContext context)
        {
            _context = context;
        }

        public IList<Movie> Movie { get; set; } = default!;

        public async Task OnGetAsync()
        {
            Movie = await _context.Movies.ToListAsync();
        }

        // 指定された id のレコード詳細を Bootstrap Modal 内に表示する
        // ための部分ビューを返すハンドラ
        public async Task<IActionResult> OnGetDetailsAsync(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var movie = await _context.Movies
                              .FirstOrDefaultAsync(m => m.Id == id);

            if (movie is not null)
            {
                return Partial("_Details", movie);
            }

            return NotFound();
        }

        // 指定された id のレコードを Movie テーブルから削除するハンドラ
        // 削除後 Index ページにリダイレクト
        public async Task<IActionResult> OnPostDeleteAsync(int? id)
        {
            if (id == null)
            {
                return NotFound();
            }

            var movie = await _context.Movies.FindAsync(id);
            if (movie != null)
            {                
                _context.Movies.Remove(movie);
                await _context.SaveChangesAsync();
            }

            return RedirectToPage("./Index");
        }
    }
}

Index.cshtml

上の Index.cshtml.cs に対応するビュー Index.cshtml ですが、スキャフォールディングにより自動生成されたコードに以下の追加・修正を行います。

  1. Bootstrap Modal のコードを追加。
  2. form 要素を追加しその中に隠しフィールドを配置。隠しフィールドはユーザーが選択したレコードの id をサーバーに送信するために用いる。
  3. id を引数にとる JavaScript 関数 openModal を定義。openModal が呼ばれると、fetch API でサーバーに要求を出し、応答として返された部分ビューの html を Bootstrap Modal 内の div 要素に書き込んだ後、引数 id の値を隠しフィールドに書き込み、Bootstrap Modal を表示する。
  4. Delete リンクを上の JavaScript 関数 openModal を呼び出すよう変更する。Model から当該レコードの Id を取得してそれを openModal の引数 id に渡す。
  5. Bootstrap Modal の [Delete] ボタンの click イベントにリスナーを設定し、リスナーで上記 2 で追加した from を submit する。

コードは以下の通りとなります。コメントの ( ) 内の数字は上の 1 ~ 5 に該当します。

@page
@model RazorPages.Pages.Movies.IndexModel

@{
    ViewData["Title"] = "Index";
}

<!-- (1) Bootstrap Modal のコードを追加 -->
<div class="modal fade" id="staticBackdrop"
     data-bs-backdrop="static" data-bs-keyboard="false"
     tabindex="-1" aria-labelledby="staticBackdropLabel"
     aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title"
                    id="staticBackdropLabel">
                    Movie to be deleted
                </h5>
                <button type="button" class="btn-close"
                        data-bs-dismiss="modal"
                        aria-label="Close">
                </button>
            </div>
            <div class="modal-body" id="details">
                ...
            </div>
            <div class="modal-footer">
                <button type="button"
                        class="btn btn-primary"
                        data-bs-dismiss="modal">
                    Cancel
                </button>
                <button type="button"
                        id="confirmedDelete"
                        class="btn btn-danger">
                    Delete
                </button>
            </div>
        </div>
    </div>
</div>

<h1>Index</h1>

<p>
    <a asp-page="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Movie[0].Title)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movie[0].ReleaseDate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movie[0].Genre)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Movie[0].Price)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.Movie)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Title)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ReleaseDate)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Genre)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Price)
                </td>
                <td>
                    <a asp-page="./Edit" asp-route-id="@item.Id">Edit</a> |
                    <a asp-page="./Details" asp-route-id="@item.Id">Details</a> 
|
                    @* (4) Delete リンクを JavaScript 関数 openModal を呼び出す
                           よう変更。当該レコードの Id を取得してそれを openModal 
                           の引数 id に渡す *@
                    <a href="javascript:void(0);" 
                        onclick="javascript:openModal('@item.Id')">
                        Delete
                    </a>
                </td>
            </tr>
        }
    </tbody>
</table>



<!-- 
    (2) form 要素を追加し中に隠しフィールドを配置。隠しフィールドは
    ユーザーが選択したレコードの id をサーバーに送信するために用いる。
    asp-page-handler="Delete" の設定により form が submit され
    ると Index.cshtml.cs の OnPostDeleteAsync が呼び出される
-->
<form method="post" id="myForm" asp-page-handler="Delete">
    <input type="hidden" name="id" id="hiddenField" />
</form>

@section Scripts {
    <script>
        $(document).ready(function () {
            // staticBackdrop は Bootstrap Modal の div 要素の id
            const modal = document.getElementById('staticBackdrop');
            const confirmationModal = new bootstrap.Modal(modal);
            const confirmActionBtn = document.getElementById('confirmedDelete');
            const myForm = document.getElementById('myForm');
            const hiddenField = document.getElementById('hiddenField');

            // (3) id を引数にとる openModal 関数を定義
            window.openModal = async (id) => {
                // fetch を使ってサーバーにリクエストを送るための url ��成
                // handler=details でハンドラ OnGetDetailsAsync を指定
                // 引数 id をクエリ文字列に追加
                const url = "/Movies?handler=details&id=" + id;

                // Movie 詳細を表示する Bootstrap Modal 内の div 要素を取得
                const detailsDiv = document.getElementById('details');

                // Fetch を使って url にリクエストを送りレスポンスを受け取る
                const response = await fetch(url);

                if (response.ok) {
                    // レスポンスのテキスト(部分ビューが返す html)を取得
                    const text = await response.text();

                    // テキストを Bootstrap Modal 内の div 要素に書き込む
                    detailsDiv.innerHTML = text;

                    // 引数 id の値を隠しフィールドの value に書き込む
                    hiddenField.value = id;

                    // Bootstrap Modal を表示
                    confirmationModal.show();
                }
            }

            // (5) Bootstrap Modal の [Delete] ボタンの click イベントに
            // リスナーを設定
            confirmActionBtn.addEventListener('click', function () {
                // [Delete] ボタンのクリックで上の form を submit する。
                // form 要素で asp-page-handler="Delete" と設定されている
                // ので Index.cshtml.cs の中の OnPostDeleteAsync ハンド
                // ラに POST 要求がかかる
                myForm.submit();
            });
        });
    </script>
}

Bootstrap Modal について以下に補足説明を書いておきます。

Visual Studio 2026 のテンプレートで、ターゲットフレームワーク .NET 10.0 として作成した ASP.NET Core Razor Pages アプリのプロジェクトには Bootstrap.js, Boorstrap.css v5.3.3 が含まれています。Bootstrap Modal を使うために必要なものはそれらの中に含まれています。(.NET Core 3.1 ~ 5.0 は v4.3.1、.NET 6.0 ~ 8.0 は v5.1 とバージョンが異なりますので注意してください)

Bootstrap Modal の詳しい説明は Bootstrap 5 のドキュメント「Modal (モーダル)」にあります。普通の html + css + javascript のページに Bootstrap Modal を組み込むなら、そのドキュメントから十分な情報が得られると思います。

上のコードの Modal の部分は Bootstrap 5 のドキュメント「Modal (モーダル)」の「Static backdrop」セクションのサンプルコードをコピペし、若干修正をして利用しています。詳細を書き込む div 要素に id="details" を追加したこと、フッター部の 2 つのボタンをキャンセル用と削除用に変更したことが主な違いです。


_Details.cshtml

Index.cshtml.cs のハンドラ OnGetDetailsAsync が呼び出す部分ビュー _Details.cshtml は以下の通りです。この _Details.cshtml が返す html が Bootstrap Modal 内に書き込まれます。

@model RazorPages.Models.Movie

<h4>Are you sure you want to delete this?</h4>

<div>
    <dl class="row">
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Title)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Title)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.ReleaseDate)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.ReleaseDate)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Genre)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Genre)
        </dd>
        <dt class="col-sm-2">
            @Html.DisplayNameFor(model => model.Price)
        </dt>
        <dd class="col-sm-10">
            @Html.DisplayFor(model => model.Price)
        </dd>
    </dl>
</div>

最後に、この記事を書くのに参考にした ASP.NET Core Razor Pages 関係の Microsoft のドキュメントへのリンクを載せておきます。

翻訳がダメなところがありますので、意味不明の場合は英語版を読むことをお勧めします。

Tags: , , , ,

CORE

About this blog

2010年5月にこのブログを立ち上げました。主に ASP.NET Web アプリ関係の記事です。ブログ2はそれ以外の日々の出来事などのトピックスになっています。

Calendar

<<  May 2026  >>
MoTuWeThFrSaSu
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

View posts in large calendar