.NET Core 6:提交Chips数据至隐藏字段后控制器无法接收
解决.NET Core 6控制器无法接收M.Chips转JSON的隐藏字段数据问题
核心问题排查与修复步骤
- 确保隐藏字段的
name属性与模型字段匹配
.NET Core MVC依赖表单元素的name属性做模型绑定,而非id。如果你的隐藏字段只设置了id="Tags",必须补充name="Tags"才能让控制器识别:
<input type="hidden" id="Tags" name="Tags" />
- 匹配模型属性类型
因为你存入的是JSON字符串,模型中对应的属性必须是string类型,否则绑定会失败:
public class FormSubmitModel { // 其他表单属性 public string Tags { get; set; } // 对应JSON格式的标签数据 }
- 验证JS赋值逻辑的正确性
在表单提交时,确认Chips实例能正确获取、值已存入隐藏字段。可以加调试日志排查:
$('form').on('submit', function(e) { const chipsInstance = M.Chips.getInstance($('.chips')); if (!chipsInstance) { console.error('未找到M.Chips实例'); e.preventDefault(); // 暂停提交方便调试 return; } const tags = chipsInstance.chipsData; const sendTags = JSON.stringify(tags, null, 2); console.log('待提交的Tags JSON:', sendTags); $('#Tags').val(sendTags); console.log('隐藏字段当前值:', $('#Tags').val()); // 确认值已写入 });
控制器接收与处理
直接用模型接收表单数据,拿到JSON字符串后可反序列化为实体列表:
using System.Text.Json; [HttpPost] public IActionResult SubmitForm(FormSubmitModel model) { if (!string.IsNullOrEmpty(model.Tags)) { // 假设你定义了Tag实体类(包含name等属性) var tagList = JsonSerializer.Deserialize<List<Tag>>(model.Tags); // 执行标签相关业务逻辑 } // 处理其他表单属性 return RedirectToAction("SubmitSuccess"); }
额外注意事项
- 隐藏字段必须放在
<form>标签内部,否则表单提交不会携带该字段 - 控制器Action必须标记
[HttpPost]特性,与表单的method="post"对应 - 检查是否有其他JS代码阻止了表单提交事件,导致赋值逻辑未执行
内容的提问来源于stack exchange,提问作者code-professional
相关产品推荐
相关产品推荐

