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

如何存储Quill编辑器DIV的值?解决内容无法存入数据库问题

解决Quill编辑器内容无法保存到数据库的问题

这个问题我做项目时也踩过同款坑,核心原因很直白:你用来承载Quill的是个<div>,而HTML表单默认只会提交**标准表单控件(input、textarea、select等)**的值,这个div的内容根本不会被打包进请求传给后端,所以你的Model的Description属性自然是空的。

下面是一步步的解决办法:


1. 添加隐藏的表单控件绑定Description

在Quill编辑器的容器div下方,加一个隐藏的<input>(或textarea),专门用来和Model的Description属性绑定。表单提交时,这个控件的值会自动传给后端。

修改后的视图代码片段:

<div class="form-group">
    <label asp-for="Description" class="control-label"></label>
    <!-- 保留Quill编辑器容器,去掉没用的asp-for -->
    <div id="editor-container" class="form-control"></div>
    <!-- 新增隐藏input,绑定Description -->
    <input type="hidden" asp-for="Description" id="hidden-description" />
    <span asp-validation-for="Description" class="text-danger"></span>
</div>

注意:原来div上的asp-for="Description"可以删掉了,因为div不是表单控件,这个属性在这里起不到任何绑定作用,反而容易混淆。

2. 同步Quill编辑器和隐藏控件的内容

接下来用JavaScript做两件关键的事:

  • 页面加载时,把Model中已有的Description值加载到Quill编辑器里
  • 编辑器内容变化时,实时把内容同步到隐藏input中

假设你已经正确引入了Quill的JS和CSS,添加这段脚本:

// 初始化Quill编辑器(主题可根据需求修改)
var quill = new Quill('#editor-container', {
    theme: 'snow'
});

// 页面初始化:把隐藏input的内容(即Model的Description)加载到编辑器
var initialContent = document.getElementById('hidden-description').value;
if (initialContent) {
    quill.root.innerHTML = initialContent;
}

// 监听编辑器内容变化,实时同步到隐藏input
quill.on('text-change', function() {
    // 如果需要纯文本内容,就用quill.getText()代替innerHTML
    document.getElementById('hidden-description').value = quill.root.innerHTML;
});

3. 后端验证(确保接收正常)

最后确认你的后端Action方法能正确接收Model的Description值,比如:

[HttpPost]
public async Task<IActionResult> SaveYourEntity(YourEntityViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    // 直接使用model.Description保存到数据库即可
    var entity = new YourEntity
    {
        Description = model.Description,
        // 其他属性...
    };

    _context.YourEntities.Add(entity);
    await _context.SaveChangesAsync();

    return RedirectToAction(nameof(Index));
}

额外注意事项

  • 如果你的应用需要防范XSS攻击,建议对保存的HTML内容进行 sanitize(比如用HtmlSanitizer库),避免恶意脚本被存储和渲染。
  • 如果只需要纯文本内容,把同步代码里的quill.root.innerHTML改成quill.getText()即可。

内容的提问来源于stack exchange,提问作者Tassisto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:34:15