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を押すと、

これが出てくるけど、これはJavaScript側の処理。
次に、runat.aspx.csを、
こうする。
button1のテキストを変えようとするもの。
しかし、

button1はサーバ側のrunatではわからない。
そこで、
buttonタグにrunat="server"を付ける。

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

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