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

Asp.Net Core使用Ajax传Ckeditor值到控制器(asp-for绑定)为null求助

问题根因

你调用new FormData(Form)序列化表单时,会自动把原始<textarea>的空值写入Form_Data,后续你再append同名的Description字段,ASP.NET Core的模型绑定逻辑会优先读取第一个出现的同名键值对,所以拿到的始终是空值。
你之前替换asp-for为id属性时生效,是因为没有asp-for生成的name="Description"属性,表单序列化时不会自动写入空的Description键值对,手动append的值就是唯一值,所以可以正常绑定。

解决方案

推荐使用CKEditor自带的内容同步方法,不需要手动操作FormData键值,逻辑更稳妥:
修改你的ValidateForm函数如下:

$(function () {
    CKEDITOR.replace('Description');       
});
function ValidateForm() {       
    // 先将CKEditor的内容同步回原始textarea
    CKEDITOR.instances.Description.updateElement();
    let Form = $("#ProductForm")[0];
    let Form_Data = new FormData(Form);
    // 无需手动append,序列化时已经拿到同步后的正确值
    $.ajax({
        url: '/AdminPanel/Product/AddAndUpdateProduct',
        data: Form_Data,
        contentType: false,
        processData: false,
        type: 'POST',
        success: function (data) {     
            // 原有业务逻辑
        }
    });
}

如果要保留原有手动append的写法,只需要在append前删除原有空值即可:

function ValidateForm() {       
    let Form = $("#ProductForm")[0];
    let Form_Data = new FormData(Form);
    var descProduct = CKEDITOR.instances.Description.getData();
    // 先删除序列化生成的空Description键值对
    Form_Data.delete("Description");
    Form_Data.append("Description", descProduct);
    $.ajax({
        url: '/AdminPanel/Product/AddAndUpdateProduct',
        data: Form_Data,
        contentType: false,
        processData: false,
        type: 'POST',
        success: function (data) {     
            // 原有业务逻辑
        }
    });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:36:04