You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core 6:提交Chips数据至隐藏字段后控制器无法接收

解决.NET Core 6控制器无法接收M.Chips转JSON的隐藏字段数据问题

核心问题排查与修复步骤

  1. 确保隐藏字段的name属性与模型字段匹配
    .NET Core MVC依赖表单元素的name属性做模型绑定,而非id。如果你的隐藏字段只设置了id="Tags",必须补充name="Tags"才能让控制器识别:
<input type="hidden" id="Tags" name="Tags" />
  1. 匹配模型属性类型
    因为你存入的是JSON字符串,模型中对应的属性必须是string类型,否则绑定会失败:
public class FormSubmitModel
{
    // 其他表单属性
    public string Tags { get; set; } // 对应JSON格式的标签数据
}
  1. 验证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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:55:19