你平常呼叫的是 C# 方法。除錯時讀到的是這張代碼表。兩套名字要對得起來,否則網路面板裡的一行會變成無法翻譯的縮寫。代碼取自 WebFormsJS 的公開 README,這裡按學習順序重排,不是按原始檔的段落順序。

一行裡面還能有前置

在動作碼前面可以加前置,README 稱為 Pre Runner。每一段前置以 結束。

前置 寫法 意義
延遲 :秒數) 等這麼多秒再執行這一行
週期 (秒數) 之後每這麼多秒再執行一次
(4)+w<b>1=10px
:10)(4)+w<b>1=10px

第一行:每 4 秒把第二個 的寬度加 10 像素。第二行:先等 10 秒,再進入同一個週期。前置放在佇列裡,可以串。 是 Increase Width,下一節的表裡有。

加、設、插入、刪

Add 是在原值上追加。Set 是換成新值。Insert 只在目前沒有值時才寫入。Delete 拿掉。這個區分比死記兩個字母重要。

@llllY@ 對象 & Add & Set & Insert & Delete
標籤內部末尾 & nt & & & de(值 )
標籤之前 & bt & & & dp 刪父標籤
標籤之後 & ft & & &
標籤前方(往上) & ut & & &
文字 & at & st & it & dt
往上加文字 & pt & & &
title & al & sl & il & dl
屬性 & aa & sa & ia & da(值是屬性名)
class & ac & sc & ic & dc
style & as & ss & is & ds(只寫樣式名)
value & av & sv & iv & dv
name & an & sn & in & dn
id & ai & si & ii & di

屬性與選項用豎線分欄。saCheckBoxInput=onchange|MyNewFunc() 表示:對 id 為 的元素,把 設成 。aoSelectInput=OptionValue|Option Text|1 表示加一個 option,第三段 是選取。

核取方塊的加入代碼是 ,值同樣是 。Set 對應 :若目標本身就是核取方塊,值只是 或 ;若是容器,值改為 。

外觀、尺寸與表單狀態

代碼 方法語意 值
bc / tc 背景色 / 文字色 CSS 顏色
fs / fn / fb 字級 / 字型 / 粗體 尺寸、名稱、 或
sw / sh 寬 / 高 CSS 長度
ta 文字對齊 例如
vi 可見 或
sd / sr / sf 停用 / 唯讀 / 聚焦 或
mx / mn 最大長度 / 最小長度 整數
ts / ti 選取的值 / 索引 下拉選單
ks / ki 核取的值 / 索引 值再加 或
cu 改瀏覽器網址 URL

可見性代碼是 ,不是把元素 。刪掉的節點下一行就指不到;隱藏的節點還在,索引也還在。

增減

增減只作用在數字。代碼是符號加一個字母,不是兩個英文字母。

對象 增加 減少
value
height
width
font size
max length
min length

+v(hdn\_Count)=1 把該隱藏欄位的值加 1。減少的寫法對稱。README 把減少這組的標題拼成 Descrease,代碼本身仍是減號。

事件

事件代碼讓一個 HTML 事件再去打伺服器,或去改頁面上的另一個位置。入門最常用的是 Post 與 Get。

代碼 方向 值的形狀
Ep / EP 設 Post 事件 / 監聽器 。 表示把回應加進頁面。
Rp / RP 移除 Post HTML 事件名稱
Eg / EG 設 Get 事件 / 監聽器 。路徑寫 表示目前這條路徑。
Rg / RG 移除 Get HTML 事件名稱
Et / ET 只改頁面、不打伺服器
Rt / RT 移除這種監聽 事件名稱

小寫代碼綁的是 HTML 事件屬性(例如 ),大寫代碼綁的是 那種監聽器。公開說明裡 Get 這組有「在表單內」與「自帶路徑」兩種值的形狀,差別在路徑那一段寫不寫。C# 端對應 、 以及帶 、、 的多載。第 10 章的 Razor 範例用的就是 。

同一份類別還有 Patch、Delete、Head、WebSocket、SSE、WASM 等事件方法。那些是進階通道。第一個能上線的表單不需要它們。知道「事件也是一行 Action Control,不是另一套前端框架」就夠。

先存起來,等一下再用

Save 這組把節點的現值存進一把鍵,稍後再用。鍵用過可以丟掉。代碼都以 開頭,避免和普通的兩個字母相撞。

代碼 存什麼 代碼 存什麼
@gi id @gn name
@gv value @ge value 的長度
@gt 文字 @gg 文字長度
@gc class @gs style
@gl title @ga 屬性(值是 )
@gw 寬 @gh 高
@gr 唯讀 @gx 選取索引
@ta 對齊 @nl 子節點數量
@vi 可見

取回時用另一組,寫在等號右邊,因為它們是「值的函式」,不是動作碼:

寫在值的位置 取出
、 快取; 取出後刪除。值是 。
、 同上,但是只活在這個瀏覽器工作階段裡的快取。
Cookie。
年、月、日。
時、分、秒、毫秒。
亂數,值是 。
執行一段腳本,把結果當值。

另外還有不帶定位、自己佔一行的指令: 執行腳本, / 設定快取秒數( 表示永久), / 刪除快取( 表示全部)。

多段回應

一份正文可以含有多組指令,組與組之間用單獨一行的 分開。請求的 URL 在路徑後面加上 來選組,索引從 0 開始。你也可以寫 給某一組命名,之後用這個名字選它。

[web-forms]
bcTextBox1=green
#
sv(email)=myemail@gmail.com
#=Saved
as<body>=margin:0

請求 或 只執行第一組。 執行第二組。 與 都執行第三組。

README 建議這項功能用在可以放進瀏覽器快取的離線回應,而不是每一次點擊都回傳一大包用不到的組。長時間快取時,記得讓這類回應帶上適合的 HTTP 快取標頭。

在這裡是協定語法,不是 URL 片段的一般用途。伺服器若先做前端路由、把井字號截掉,多段回應的選組會失效。井字號通常不會送到伺服器;WebFormsJS 是在用戶端挑選已經下載的那一組。