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

ASP.NET MVC提交表单时字符串转Contact类属性报错如何解决

错误原因

你的Person模型中Contact属性是Contact类的实例类型,而你直接把字符串类型的手机号赋值给它,两边类型不匹配,因此触发了类型转换报错。

解决方案

1. 先确认Contact类定义

首先确保你项目里的Contact类已经正确定义了PhoneNumber属性:

namespace WebApplication1.Models
{
    public class Contact
    {
        public string PhoneNumber { get; set; }
        // 如果有其他联系人类的属性,可在此处补充
    }
}

2. 修改控制器代码

你有两个可选的修改方案,推荐用方案二更简洁:

方案一:修正实例化逻辑

首先要把静态列表Persons移到控制器类的层级,不要定义在Post方法内部,否则每次请求都会重新初始化列表,之前存入的数据会全部丢失。报错的行需要先实例化Contact对象再赋值:

public class PersonController : Controller
{
    // 静态列表移到类级别,全局共享
    public static List<Person> Persons = new List<Person>();

    [HttpPost]
    public IActionResult Index(Person person)
    {
        Persons.Add(new Person
        {
            Name = person.Name,
            // 实例化Contact对象,给PhoneNumber属性赋值
            Contact = new Contact { PhoneNumber = person.Contact.PhoneNumber }
        });
        return View("List");
    }
}

方案二:直接使用模型绑定好的对象

ASP.NET Core MVC已经自动帮你把表单数据绑定到了参数person对象上,不需要手动重新实例化Person,直接把这个对象加入列表即可:

public class PersonController : Controller
{
    public static List<Person> Persons = new List<Person>();

    [HttpPost]
    public IActionResult Index(Person person)
    {
        // 直接添加绑定完成的person对象即可
        Persons.Add(person);
        return View("List");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:24:03