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
相关产品推荐
相关产品推荐

