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

视图传参至控制器时List模型始终为null的问题

表单提交后模型回传控制器为null问题解决

问题描述

提交表单后,控制器Post方法接收的AP_UserFormL模型始终为null。浏览器网络面板显示所有表单值已正确传递,但控制器中模型参数仍为null,Get方法展示数据功能正常。

模型代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace OTWebApplication.Models
{
    public class AP_UserForm
    {
        public String UFID { get; set; }
        public String UF_YID { get; set; }
        public String UF_FormID { get; set;}
        public String UF_FormName { get; set; }
        public String UF_EvaID { get; set; } // คนประเมิน
        public String UF_EvaName { get; set; }
        public String UF_RootID { get; set; } // พนักงาน
        public String UF_RootName { get; set; }
        public String UF_Available { get; set; } //ให้ประเมิน หรือไม่ต้องประเมินพนักงานคนนี้ 
        public String UF_STID { get; set; } // สถานะใบประเมิน
    }

    public class AP_UserFormL
    {
        public List<AP_UserForm> AP_UserForms { get; set; }

        public AP_UserFormL()
        {
            AP_UserForms = new List<AP_UserForm>();
        }
    }
}

视图HTML代码

@model OTWebApplication.Models.AP_UserFormL
<form asp-action="ManageAP_usershow" method="post">
    <table class="table">
        <thead>
            <tr>
                <th>EmployeeID</th>
                <th>EmployeeName</th>
                <th>EvaluatorID</th>
                <th>FormName</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            @if (Model != null)
            {
                @for (var i = 0; i < Model.AP_UserForms.Count(); i++)
                {
                        <tr>
                            <td>
                                <input type="hidden" asp-for="@Model.AP_UserForms[i].UFID" class="form-control" />
                                <input type="hidden" asp-for="@Model.AP_UserForms[i].UF_YID" class="form-control" />
                                <input type="hidden" asp-for="@Model.AP_UserForms[i].UF_STID" class="form-control" />
                                <input asp-for="@Model.AP_UserForms[i].UF_RootID" class="form-control" />

                            </td>
                            <td>
                                <input asp-for="@Model.AP_UserForms[i].UF_RootName" class="form-control" />
                            </td>
                            <td>
                                <select asp-for="@Model.AP_UserForms[i].UF_EvaID" class="form-control">
                                    @foreach (var item in ViewBag.ARoot)
                                    {
                                        <option value="@item.ARoot_ID">@item.ARoot_Name</option>
                                    }
                                    <option value="@Model.AP_UserForms[i].UF_EvaID">@Model.AP_UserForms[i].UF_EvaName</option>
                                </select>
                            </td>
                            <td>
                                <select asp-for="@Model.AP_UserForms[i].UF_FormID" class="form-control">
                                    @foreach (var item in ViewBag.Form)
                                    {
                                        <option value="@item.FormID">@item.FormName</option>
                                    }
                                    <option value="@Model.AP_UserForms[i].UF_FormID">@Model.AP_UserForms[i].UF_FormName</option>
                                </select>
                            </td>
                            <td>
                                <select asp-for="@Model.AP_UserForms[i].UF_Available" class="form-control">
                                    <option value="0">ไม่ต้องประเมิน</option>
                                    <option value="1">ประเมินปกติ</option>
                                </select>
                            </td>
                        </tr>
                    }
            }
        </tbody>
    </table>
    <button input type="submit"value="Edit">Update</button>
</Form>

控制器代码

public IActionResult ManageAP_usershow(String id)  
{
    AP_UserFormL ShowAPList = ManageAP_usershowList(id);
    ViewData["ARoot"] = GetARoot();
    ViewData["Form"] = GetForm();
    return View(ShowAPList);
}

[HttpPost]
public IActionResult ManageAP_usershow([FromBody] AP_UserFormL model)
{
    foreach(var item in model.AP_UserForms)
    {
        if (ModelState.IsValid)
        {
            Console.WriteLine("pass");
        }
    }

    return RedirectToAction("ManageAP", "Appraisal");
}

解决方案

1. 移除[FromBody]特性

表单默认提交application/x-www-form-urlencoded格式数据,而[FromBody]特性用于接收JSON格式请求体,两者不匹配导致模型无法绑定。修改Post方法:

[HttpPost]
public IActionResult ManageAP_usershow(AP_UserFormL model)
{
    if (ModelState.IsValid && model?.AP_UserForms != null)
    {
        foreach(var item in model.AP_UserForms)
        {
            Console.WriteLine("pass");
        }
    }

    return RedirectToAction("ManageAP", "Appraisal");
}

2. 修复提交按钮的错误写法

原按钮代码中的input属性多余,修正为:

<button type="submit">Update</button>

3. 验证表单元素Name属性(可选)

asp-for标签助手会自动生成正确的Name属性(如AP_UserForms[0].UFID),确保表单字段能正确映射到集合模型。可通过浏览器检查元素确认Name格式是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:27:09