必须使用method="post"且enctype="multipart/form-data"组合才能上传文件,get请求无效,普通post若未设该enctype则文件字段被忽略或解析失败。

form 的 method 和 enctype 组合必须匹配数据类型
提交表单时若出现 400 Bad Request 或后端收不到文件,大概率是 method 和 enctype 没对齐。比如用 POST 提交普通文本却忘了设 enctype,浏览器默认用 application/x-www-form-urlencoded,这没问题;但只要加了 <input type="file">,就必须显式写 enctype="multipart/form-data",否则文件字段会被忽略,甚至整个请求体解析失败。
-
method="GET"时,enctype完全无效(浏览器会忽略),且所有字段都会拼到 URL 后,所以不能传文件、不能传长文本、不能传二进制 -
method="POST"+enctype="multipart/form-data":唯一支持文件上传的组合,但会导致后端无法直接读取request.body原始字符串(需用 multipart 解析器) -
method="POST"+ 默认enctype(即application/x-www-form-urlencoded):适合纯文本字段,但所有值都会被 URL 编码,空格变+,中文变%E4%B8%AD
input 的 required 和 placeholder 不解决空值逻辑
required 只在前端阻止提交,不保证后端收到非空值;placeholder 纯属 UI 提示,提交时不会发送——它不是默认值。用户清空输入框再提交,字段就是空字符串或 null,和没填一样。
- 后端必须独立校验空值,不能依赖前端属性
- 想设“未填写时用默认值”,得靠后端逻辑(如 ASP.NET Core 中模型属性初始化:
public string AddressLine3 { get; set; } = "N/A";),或 JS 在 submit 前补值 -
value属性可设初始值(如<input type="text" name="age" value="18">),但它会被用户修改,且若用户删空再提交,仍发空字符串
type="number" 的边界行为常被误用
type="number" 看似能防非数字输入,实际只过滤键盘输入(粘贴或 JS 赋值仍可塞入字符串),且提交时会把空值转成空字符串而非 null,导致后端解析失败。
- 它不阻止用户输入
"12.5abc"—— 浏览器只保留开头合法数字部分(变成"12.5"),其余静默丢弃 - 留空提交时,
value是空字符串"",不是undefined或null,后端需额外处理 - 若需严格整数,应配合
step="1"和min/max,但依然要后端校验,因为用户可绕过 HTML 层直接发请求
name 属性缺失会导致字段根本不出现在请求体中
无论 id 或 class 多规范,只要 input 没写 name,它就不会随表单一起提交。这是最隐蔽也最常踩的坑——页面看着正常,但后端收不到这个字段。
-
name是字段在请求体中的键名,例如<input name="email">提交后对应email=xxx@xxx.com - 单选组(
radio)必须共用同一个name才能互斥;复选框(checkbox)同名时,选中项会以数组形式提交(如hobby[]=read&hobby[]=game) - 带方括号的
name(如user[address])在某些后端框架中能自动映射为嵌套对象,但并非所有服务器都原生支持,需确认接收端解析逻辑
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











