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

ASP.NET Core表单提交报错:PostFou与视图要求的JobAddressVM类型不匹配

错误原因
  1. 视图明确声明了@model AURA.ViewModels.JobAddressVM,要求接收的模型必须是JobAddressVM类型,但HttpPost的JobAddress方法中,当ModelState.IsValid == false验证失败时,返回视图时传入了postFou(AURA.Models.PostFou类型),两种类型不匹配,直接触发类型转换异常。
  2. 目前Post方法的参数绑定逻辑完全没有用到自定义的JobAddressVM,你写的ViewModel验证规则、字段配置完全未生效,表单提交的字段被ASP.NET Core模型绑定器自动映射到了PostZero、PostOne、PostFou三个实体的同名字段上,这也是你没找到显式引用PostFou但它被实例化传入的原因。
修复方案
  1. 修改HttpPost方法的参数,直接接收JobAddressVM类型的模型,替换原有三个实体参数,让自定义验证规则生效:
[HttpPost]
public async Task<IActionResult> JobAddress(JobAddressVM model)
{
    if (ModelState.IsValid)
    {
        // 手动把VM字段赋值到三个业务实体
        PostZero postZero = new PostZero()
        {
            FouName = model.FouName,
            FouPhon = model.FouPhon,
            FouEmai = model.FouEmai,
            FouAddr = model.FouAddr,
            FouPost = model.FouPost,
            FouOrg = model.FouOrg,
            ZeroDate = DateTime.Now
        };
        string uDate = DateTime.Now.ToString("yyMMdd");
        string uDigit = _context.PostZeros.Count(d => d.ZeroDate.Date == postZero.ZeroDate.Date).ToString();
        postZero.Zero = uDate + "-" + uDigit;
        postZero.ZeroAgen = User.Identity.Name;
        _context.Add(postZero);
        await _context.SaveChangesAsync();

        PostOne postOne = new PostOne()
        {
            OneStag = "MSR",
            OneZero = postZero.Zero,
            OneAgen = User.Identity.Name,
            OnePart = model.FouPhon,
            OneTitl = "T--" + model.FouName + "--" + DateTime.Now.ToShortDateString(),
            OneType = "MSR"
        };
        _context.Add(postOne);
        await _context.SaveChangesAsync();

        PostEig postEig = new PostEig()
        {
            EigZero = postZero.Zero,
            EigAgen = "CLIENT",
            EigRole = "SALE",
            EigLoad = 0
        };
        _context.Add(postEig);
        await _context.SaveChangesAsync();

        PostFou postFou = new PostFou()
        {
            FouZero = postZero.Zero,
            FouName = model.FouName,
            FouPhon = model.FouPhon,
            FouEmai = model.FouEmai,
            FouAddr = model.FouAddr,
            FouPost = model.FouPost,
            FouOrg = model.FouOrg
        };
        _context.Add(postFou);
        await _context.SaveChangesAsync();
                
        return RedirectToAction(nameof(PriceShip), new { zero = postOne.OneZero });
    }
    // 验证失败时直接返回JobAddressVM类型的model,和视图要求的类型匹配
    return View(model);
}
  1. 可选优化:Get请求方法主动传入空的ViewModel实例,避免潜在的空引用问题:
public IActionResult JobAddress()
{
    return View(new JobAddressVM());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:54:08