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

提交表单至Controller时Model始终为Null的排查求助

表单提交后Model始终为Null的问题排查与解决

核心问题1:视图模型缺少模型绑定器可实例化的构造函数

你的PropertyViewModel继承自PublishedContentWrapped,仅提供了需要IPublishedContent和IPublishedValueFallback参数的构造函数。ASP.NET Core的模型绑定器无法自动创建这种依赖外部服务的对象实例,直接导致绑定失败,模型为Null。

修复方案:添加无参构造函数,供模型绑定器使用:

public class PropertyViewModel: PublishedContentWrapped
{
    // 新增无参构造函数,传递null给基类构造(仅用于模型绑定)
    public PropertyViewModel() : base(null, null)
    {
        this.Countries = GetCountries();
    }

    public PropertyViewModel(IPublishedContent content, IPublishedValueFallback publishedValueFallback) : base(content, publishedValueFallback)
    {
        this.Countries = GetCountries();
    }

    // 原有属性与方法保持不变...
}

核心问题2:AJAX请求的dataType设置冲突

你提交的是multipart/form-data格式的FormData,但AJAX配置中设置了dataType: 'JSON',这会让jQuery错误地处理请求格式,干扰模型绑定的解析逻辑。

修复方案:移除dataType: 'JSON'配置:

$.ajax({
    url: "/umbraco/surface/PropertySurface/HandleAddProperty",
    data: formdata,
    processData: false,
    contentType: false,
    method:"post"
}).done(function (response) {
    // 根据实际响应处理逻辑编写代码
});

额外优化建议

  • 确认AntiForgeryToken存在:Html.BeginUmbracoForm会自动生成__RequestVerificationToken隐藏字段,new FormData(this)已包含该字段,无需手动添加;若后续出现验证失败,可手动确认字段是否被正确携带。
  • 适配AJAX的响应格式:当前控制器在验证失败时返回CurrentUmbracoPage()(整页HTML),AJAX请求无法正确解析。可修改控制器,针对AJAX请求返回JSON格式的错误信息:
[HttpPost]
[ValidateAntiForgeryToken]
[ValidateUmbracoFormRouteString]
public async Task<IActionResult> HandleAddProperty(PropertyViewModel model)
{
    if (!ModelState.IsValid)
    {
        if (Request.Headers["X-Requested-With"] == "XMLHttpRequest")
        {
            var errors = ModelState.Values
                .SelectMany(v => v.Errors)
                .Select(e => e.ErrorMessage);
            return Json(new { success = false, errors });
        }
        return CurrentUmbracoPage();
    }

    // 执行业务逻辑
    return Json(new { success = true });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:54:24