Page

ASP.NETのaspxページは、Page(System.Web.UI.Page)クラスをベースに出来ている。

Page クラス (System.Web.UI) | Microsoft Docs
ASP.NET ではそれぞれのページが Page クラスから派生したクラスのオブジェクトである - はじめての ASP.NET - ASP.NET 入門

Page_.aspxだけを用意して、

<%@ Page Language="C#" %>
<html>
  <head runat="server">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title id="title_index">Page_</title>
  </head>
  <body>
    <%
      Type t = GetType();
      string resStr = t.ToString();
      resStr = resStr + "<br />";
      Type baseType = t.BaseType;
      resStr = resStr + baseType.ToString();
      Response.Write(resStr);
    %>
  </body>
</html>

このように、このページの型名と継承元の型名を出力する。

このページそのものは、&quot;ASP.&quot; + 拡張子を除いて小文字にしたファイル名 + &quot;_aspx&quot;
このページそのものは、"ASP." + 拡張子を除いて小文字にしたファイル名 + "_aspx"

このページそのものは、"ASP." + 拡張子を除いて小文字にしたファイル名 + "_aspx"になっている。
継承元は、System.Web.UI.Page。
Page_.aspx.csを追加し、

このように書き、
Page_.aspxは、

継承元の継承元まで出力するようにする。

このページは、InheritsでPage_を継承し、さらにPage_はSystem.Web.UI.Pageを継承してるからこうなる。
このページは、InheritsでPage_を継承し、さらにPage_はSystem.Web.UI.Pageを継承してるからこうなる。

このページは、InheritsでPage_を継承し、さらにPage_はSystem.Web.UI.Pageを継承してるからこうなる。

Sample/aspnet/Page/Page/src/Page at master · bg1bgst333/Sample · GitHub

Type.BaseType

BaseTypeプロパティで、そのTypeの継承元のTypeを取得できる。

Type.BaseType プロパティ (System) | Microsoft Docs

MainClass.csで、

tint.BaseTypeでtintのさらに継承元のbaseTypeを取得する。

tint = System.Int32
baseType = System.ValueType
続行するには何かキーを押してください . . .

tintはInt32、baseTypeはValueType。

Int32 構造体 (System) | Microsoft Docs

確かにInt32の継承元はValueType。

Sample/dotnet/Type/BaseType/src/Type_ at master · bg1bgst333/Sample · GitHub

runat(head)

runat="server"は、headに付ける場合もある。

サーバー側オブジェクト タグ構文 | Microsoft Docs

例えば、PageのTitleを変える時に、runat.aspxが、

<%@ Page Language="C#" CodeFile="runat.aspx.cs" Inherits="runat" %>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title id="title_index">runat</title>
  </head>
  <body>
  </body>
</html>

で、runat.aspx.csにて、

Load時にTitleを"ABCDE"に変えようとするが、

こうなる。
こうなる。

こうなる。
思いっきり、「headにrunat="server"付けろ!」って言ってる・・・。

headにrunat="server"付けた。

Titleが&quot;ABCDE&quot;に変わった
Titleが"ABCDE"に変わった

Titleが"ABCDE"に変わった。

Sample/aspnet/runat/head/src/runat at master · bg1bgst333/Sample · GitHub

runat(script)

scriptタグにrunat="server"を付けることで、C#の分離コード(コードビハインド)を".aspx"側に持ってくることが出来る。

サーバー側オブジェクト タグ構文 | Microsoft Docs

runat.aspxで、

JavaScript側のscriptタグとは別に、C#側のrunat="server"付きscriptタグを用意し、そこにrunat.aspx.csにあったメソッドを持ってくる。
これでrunat.aspx.csは、

空の状態。

最初
最初

最初。
button1を押すと、

まずはJavaScript側のalertが出る
まずはJavaScript側のalertが出る

まずはJavaScript側のalertが出る。
そして、

C#側のサーバコントロールイベント処理によりbutton1のテキストが変わる
C#側のサーバコントロールイベント処理によりbutton1のテキストが変わる

C#側のサーバコントロールイベント処理によりbutton1のテキストが変わる。

Sample/aspnet/runat/script/src/runat at master · bg1bgst333/Sample · GitHub

runat(form)

前回は、buttonに付けるパターンだが、今回はformに付けるパターン。

サーバー側オブジェクト タグ構文 | Microsoft Docs

runat.aspx.csを、

こうする。
Load時にServerClickのイベントハンドラを登録し、button1が押されたら"Clicked!"にする。
これで、

起動時こうなっているのが、
起動時こうなっているのが、

起動時こうなっているのが、button1を押すと、

JavaScript側のalertは出る。
JavaScript側のalertは出る。

JavaScript側のalertは出る。

しかし、button1のテキストは変わらない。
しかし、button1のテキストは変わらない。

しかし、button1のテキストは変わらない。

formにrunat="server"を付けて囲む。

最初
最初

最初。
button1を押すと、

JavaScript側のalert
JavaScript側のalert

JavaScript側のalert。

今度は&quot;Clicked!&quot;に変わった
今度は"Clicked!"に変わった

今度は"Clicked!"に変わった。

出力HTML見るといろいろ書き換わっている
出力HTML見るといろいろ書き換わっている

出力HTML見るといろいろ書き換わっている。

Sample/aspnet/runat/form/src/runat at master · bg1bgst333/Sample · GitHub

runat(button)

ASP.NETのページのHTMLでよく見かけるrunat="server"という属性。
これは、ASP.NET特有のものであり、サーバーコントロールであることを示している。

サーバー側オブジェクト タグ構文 | Microsoft Docs

まず、runat.aspxを、

<%@ Page Language="C#" CodeFile="runat.aspx.cs" Inherits="runat" %>
<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <title id="title_index">runat</title>
    <script>
      function button1_click(){
        alert("clicked!");
      }
    </script>
  </head>
  <body>
    <button id="button1" onclick="button1_click();">button1</button>
  </body>
</html>

とし、runat.aspx.csを、

public partial class runat : System.Web.UI.Page
{

}

こうする。
runatはPageを継承していること以外は何もしていない。

起動すると、こういうbutton1だけ。
起動すると、こういうbutton1だけ。

起動すると、こういうbutton1だけ。
button1を押すと、

これが出てくるけど、これはJavaScript側の処理。
これが出てくるけど、これはJavaScript側の処理。

これが出てくるけど、これはJavaScript側の処理。
次に、runat.aspx.csを、

こうする。
button1のテキストを変えようとするもの。
しかし、

button1はサーバ側ではわからない。
button1はサーバ側ではわからない。

button1はサーバ側のrunatではわからない。
そこで、

buttonタグにrunat="server"を付ける。

button1のテキストが変わっている
button1のテキストが変わっている

Load時にbutton1のテキストが変わっている。

出力されたHTMLのソースを見ると、runat=&quot;server&quot;はない。
出力されたHTMLのソースを見ると、runat="server"はない。

出力されたHTMLのソースを見ると、runat="server"はない。
標準のHTMLではなく、ASP.NETが書き換える場所の目安でしかないため。

Sample/aspnet/runat/button/src/runat at master · bg1bgst333/Sample · GitHub

CodeBehind

今度は、ASP.NET Webアプリケーションをつくる。

ここまでフォルダを作っておく
ここまでフォルダを作っておく

ここまでフォルダを作っておく。

これでOK
これでOK

これでOK。

こんな感じ。
こんな感じ。

こんな感じ。
Default.aspxが、

CodeFileではなく、CodeBehindになっているのが特徴。

@ Page | Microsoft Docs

ビルドすると、

こっちはちゃんとコンパイルする
こっちはちゃんとコンパイルする

こっちはちゃんとコンパイルする。
binの下に".dll"のファイルが生成される。
デバッグ実行で、

無題のページ
無題のページ

無題のページ。
ちなみにこれはIISではなくて、

こういうバックグラウンドサーバが動いてて、これの上で動いてる。
こういうバックグラウンドサーバが動いてて、これの上で動いてる。

こういうバックグラウンドサーバが動いてて、これの上でこのWebアプリは動いてる。
このWebアプリをwwwrootに持っていって動かしてみる。

Default.aspxだけ持って行っても
Default.aspxだけ持って行っても

Default.aspxだけ持って行っても、

分離コード側が無いのでエラー
分離コード側が無いのでエラー

分離コード側が無いのでエラー。

同じところにdllを置く
同じところにdllを置く

同じところにdllを置く。

これもダメ
これもダメ

これもダメ。

ちゃんとbinフォルダをつくって、
ちゃんとbinフォルダをつくって、

ちゃんとbinフォルダをつくって、

そこにdllを置く
そこにdllを置く

そこにdllを置く。

そしたら動く
そしたら動く

そしたら動く。

Sample/aspnet/PageDirective/CodeBehind/src/PageDirective at master · bg1bgst333/Sample · GitHub