你平常呼叫的是 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 是在用戶端挑選已經下載的那一組。