這一章只建立宿主,還不寫業務。目標是:瀏覽器開得到一頁 HTML,標頭裡有 WebFormsJS,伺服器進得了 。

你需要的工具

  • .NET SDK 10。CodeBehind 4.8.1 的 NuGet 頁面寫明它對準 。

  • 一個可以看網路回應的瀏覽器。開發者工具的 Network 面板比任何日誌都重要,因為你要核對的是表單正文與那份 INI。

下面的指令用 SDK 內建的空網站當起點,不使用 Visual Studio 專用的精靈。介面不同沒有關係,最後要出現的檔案是一樣的。

dotnet new web -n HelloWebForms
cd HelloWebForms
dotnet add package CodeBehind --version 4.8.1

在 .NET 10 會產生最小的 。把官方套件頁上的註冊貼進去。開發環境不要在啟動時做正式編譯快取,所以 的參數用「不是 Development 才啟用」:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddCodeBehind(!builder.Environment.IsDevelopment());

var app = builder.Build();

app.UseCodeBehind();

app.Run();

套件說明還列出兩個變體,先知道名字即可。 改為非同步執行。 讓這個中介軟體找不到頁面時繼續往後送,而不是自己結束請求。第一個練習用同步的 就夠。

執行 ,用瀏覽器打開終端機印出的位址。CodeBehind 的文件說,第一次設定並執行時,預設模板會進到 。若目錄已經存在,而且選項裡的 不是 ,模板不一定會再生成。看到版面之後,檢視原始碼,確認 裡有:

<script type="text/javascript" src="/script/web-forms.js"></script>

這一行是後續所有自動 的前提。沒有它,提交按鈕就是普通的整頁 POST。

View 與 Controller 各放什麼

CodeBehind 的 View 是 。官方 MVC 範例把控制器名字寫在頁首,而不是寫死在路由表。Razor 風格像這樣:

@page
@controller MyController
@model MyModel

標準風格則是:

<%@ Page Controller="MyController" Model="MyModel" %>

WebForms Core 的入門教學更短,只用控制器與版面,不強制 Model:

@page
@controller MyController
@layout "/layout.aspx"
@{
    ViewData.Add("title", "WebForms Core page");
}

控制器是一個部分類別,進入點固定叫 :

using CodeBehind;

public partial class MyController : CodeBehindController
{
    public void PageLoad(HttpContext context)
    {
    }
}

View 負責標記與欄位名稱。Controller 負責讀 、決定要不要動資料、然後交出一份 。不要在 裡寫事件處理。CodeBehind 的設計就是讓伺服器程式留在類別裡。

最小的一頁

把 裡的 換成下面這份。欄位 會原樣出現在 POST 正文裡,所以控制器待會用同樣的字串去讀。

@page
@controller MyController
@layout "/layout.aspx"
@{
    ViewData.Add("title", "WebForms Core page");
}
<form method="post">
  <label>Your name
    <input type="text" name="txt_Name" />
  </label>
  <label>Font size
    <input type="number" name="txt_FontSize" value="28" />
  </label>
  <label>Background
    <input type="text" name="txt_BackgroundColor" value="violet" />
  </label>
  <input type="submit" name="btn_SetBodyValue" value="Send" />
</form>

版面檔沿用模板。你要確認的只有腳本那一行還在 裡。提交鈕不需要手寫 。 的預設是開啟,函式庫會自己補上 。

第一頁在點擊之前。三個欄位都在同一個 裡,按鈕是 。

不使用 CodeBehind 的時候

協定不要求 。獨立套件 提供同一套 類別,給一般的 ASP.NET Core 使用。靜態頁面只要能載入 。腳本本體在 儲存庫,檔名就是 。

這種宿主裡沒有 與 。你自己把 寫進 HTTP 正文, 用 或 都可以,WebFormsJS 看的是正文開頭,不是媒體類型的細分。第一次整頁則把 放進 Razor 的 ,讓指令以 HTML 註解的形式跟著頁面下來。公開的 Razor 範例使用的鍵是 。

不要同時啟用兩套「也叫 Web Forms」的中介軟體來處理同一條路由。CodeBehind 的 、WebFormsForCore 的 、WebFormsCore 的 是三個不同管線。這章只留 CodeBehind。