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

ASP.NET Core 6 MVC如何获取视图HTML表单提交数据并存入对象

ASP.NET Core 6 MVC 表单提交绑定对象实现方案

你不需要手动逐字段读取表单值,ASP.NET Core 内置的模型绑定功能可以自动把提交的表单数据映射到C#对象,按以下三步实现即可:


1. 创建对应表单字段的模型类

在项目的Models文件夹下新建ComplaintForm.cs类,类的属性名必须和表单input/select/textarea的name属性名匹配(大小写不敏感),多选复选框用集合类型接收:

using System.ComponentModel.DataAnnotations;

namespace YourProjectName.Models;

public class ComplaintForm
{
    /// <summary>
    /// 是否为本行客户
    /// </summary>
    public string CustomerCheck { get; set; } = string.Empty;

    /// <summary>
    /// 用户全名
    /// </summary>
    [Required(ErrorMessage = "全名不能为空")]
    public string Fullname { get; set; } = string.Empty;

    /// <summary>
    /// CNIC/SNIC证件号
    /// </summary>
    [Required(ErrorMessage = "证件号不能为空")]
    public string Cnic { get; set; } = string.Empty;

    /// <summary>
    /// 投诉涉及领域
    /// </summary>
    [Required(ErrorMessage = "请选择投诉涉及领域")]
    public string ConcernedArea { get; set; } = string.Empty;

    /// <summary>
    /// 投诉详情
    /// </summary>
    [Required(ErrorMessage = "请填写投诉详情")]
    public string Complaint { get; set; } = string.Empty;

    /// <summary>
    /// 事件发生日期
    /// </summary>
    [Required(ErrorMessage = "请选择事件日期")]
    public DateTime IncidentDate { get; set; }

    /// <summary>
    /// 涉及支行名称(非必填)
    /// </summary>
    public string? BranchName { get; set; }

    /// <summary>
    /// 首选沟通方式
    /// </summary>
    [Required(ErrorMessage = "请选择首选沟通方式")]
    public string PreferredCommunicationMedium { get; set; } = string.Empty;

    /// <summary>
    /// 首选致电时间(多选,用字符串集合接收)
    /// </summary>
    [Required(ErrorMessage = "请选择首选致电时间")]
    public List<string> PreferredCallTime { get; set; } = new();

    /// <summary>
    /// 联系电话
    /// </summary>
    [Required(ErrorMessage = "联系电话不能为空")]
    public string CustomerNumber { get; set; } = string.Empty;

    /// <summary>
    /// 邮箱地址
    /// </summary>
    [Required(ErrorMessage = "邮箱地址不能为空")]
    [EmailAddress(ErrorMessage = "邮箱格式不正确")]
    public string EmailAddress { get; set; } = string.Empty;
}

2. 编写控制器处理方法

在对应控制器(默认是HomeController)中添加GET和POST处理方法:

  • GET方法负责返回表单页面
  • POST方法参数直接接收ComplaintForm类型,模型绑定会自动把表单值填充到这个对象里,拿到后可以直接操作、打印、存储
using Microsoft.AspNetCore.Mvc;
using YourProjectName.Models;

namespace YourProjectName.Controllers;

public class HomeController : Controller
{
    // GET:返回表单页面
    public IActionResult Index()
    {
        return View();
    }

    // POST:接收提交的表单数据
    [HttpPost]
    public IActionResult Index(ComplaintForm formData)
    {
        // 模型校验不通过(比如必填项为空、格式错误),直接返回表单页提示错误
        if (!ModelState.IsValid)
        {
            return View(formData);
        }

        // 此处formData就是填充完成的表单对象,直接读取属性即可打印所有内容
        // 示例:拼接所有提交内容
        string submitInfo = $@"
===== 用户投诉提交信息 =====
是否为本行客户:{formData.CustomerCheck}
用户姓名:{formData.Fullname}
证件号:{formData.Cnic}
投诉领域:{formData.ConcernedArea}
投诉详情:{formData.Complaint}
事件日期:{formData.IncidentDate:yyyy-MM-dd}
涉及支行:{formData.BranchName ?? "未填写"}
首选沟通方式:{formData.PreferredCommunicationMedium}
首选致电时间:{string.Join("、", formData.PreferredCallTime)}
联系电话:{formData.CustomerNumber}
邮箱地址:{formData.EmailAddress}
";
        // 你可以在此处做后续操作:写入数据库、写日志、发通知邮件等
        // 示例:把提交信息传给结果页展示
        ViewBag.SubmitInfo = submitInfo;
        return View("SubmitSuccess");
    }

    // 提交成功展示页
    public IActionResult SubmitSuccess()
    {
        return View();
    }
}

3. 现有视图的小调整

你当前写的原生HTML表单不需要大改,已经指定method="post",默认就会提交到上面写的POST方法,只需要修复一个小bug:

「是否为ABL客户」的Yes单选框关联label的for属性值是Yes(大写Y),但对应input的id是yes(小写y),会导致点击文字无法选中单选框,把label改成<label for="yes">Yes</label>即可。

如果后续想做更严谨的强类型视图,可以在视图顶部添加@model YourProjectName.Models.ComplaintForm,用ASP.NET Core的Tag Helper生成表单元素,不修改也不影响当前功能。


注意事项

  • 模型绑定依赖表单元素的name属性和模型属性名匹配,不要随意修改现有表单元素的name值,否则会出现绑定失败、属性值为空的问题
  • 同name的复选框多选项必须用List<string>或者string[]类型接收,否则只能拿到最后一个选中的值
  • 不需要手动通过Request.Form["字段名"]逐字段取值,模型绑定会自动完成类型转换和值映射

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 12:12:21