Umbraco 10中Post提交表单时获取模型数据失败求助
问题排查与解决方案
1. 修正Action方法名错误
你的控制器Action方法名和表单指定的asp-action不匹配:
- 表单中
asp-action="Save",但控制器方法名写的是ChangeInfoController,这会导致路由无法匹配,模型自然无法绑定。 - 正确的Action方法名应该是
Save:
[HttpPost] public IActionResult Save(ContentModel model) { // 现在尝试访问model.Form }
2. 确保表单字段name属性与模型层级匹配
Umbraco生成的FormInput类型作为ContentModel的Form属性,表单中的输入字段需要正确设置name属性,对应模型的层级结构:
比如FormInput有UserName、Email属性,那么表单输入框应该这样写:
<input type="text" name="Form.UserName" /> <input type="email" name="Form.Email" />
只有name属性和模型的属性路径完全一致,模型绑定才能将表单值映射到model.Form中。
3. 显式指定模型绑定来源(可选)
如果上述步骤仍未解决问题,可以尝试给模型参数添加[FromForm]特性,强制从表单数据中绑定:
[HttpPost] public IActionResult Save([FromForm] ContentModel model) { // 检查model.Form是否有值 }
4. 直接绑定FormInput模型(备选方案)
如果ContentModel中只有Form属性是表单提交的内容,可以直接将Action参数改为FormInput类型,简化绑定:
[HttpPost] public IActionResult Save(FormInput model) { // 直接使用model即可,无需通过ContentModel.Form }
同时对应的表单字段name属性去掉Form.前缀,比如name="UserName"。
内容的提问来源于stack exchange,提问作者MTplus
相关产品推荐
相关产品推荐

