ASP.NET MVC使用TextBoxFor时出现空引用异常问题求助
空引用异常成因
1. POST动作中模型绑定失败导致参数为空
HttpPost类型的Create方法中直接访问member对象的属性,若表单提交的数据不符合模型绑定规则,ASP.NET MVC无法完成Member实例的构造,会将member参数赋值为null,此时访问其成员就会触发空引用异常。
最常见的触发场景是生日字段未填写或格式错误:Member类中的BirthDay为不可空的DateTime值类型,如果表单提交的生日值为空或格式无效,会直接导致整体模型绑定失败,member对象变为null。
2. GET动作未向视图传递初始模型实例
GET类型的Create方法直接返回视图但未传入Member实例,此时视图的Model属性默认为null,虽然Html辅助方法对null模型有基础兼容处理,但如果视图中存在直接访问Model成员的逻辑,会直接抛出空引用异常。
修复方案
1. 修改GET动作,传入空模型实例
// GET: Home public ActionResult Create() { return View(new Member()); }
2. POST动作中增加空值与模型有效性校验
[HttpPost] public ActionResult Create(Member member) { // 先校验模型是否绑定成功、验证是否通过 if (member == null || !ModelState.IsValid) { // 校验失败返回视图,保留用户已输入内容 return View(member ?? new Member()); } string msg = ""; msg = $"註冊資料如下:<br>" + $"帳號:{member.UserId}<br>" + $"密碼:{member.Pwd}<br>" + $"姓名:{member.Name}<br>" + $"信箱:{member.Email}<br>" + $"生日:{member.BirthDay.ToShortDateString()}"; ViewBag.Msg = msg; return View(member); }
可选优化:将生日改为可空类型
如果生日不是必填字段,可以修改Member类的BirthDay属性为可空类型,避免因未填生日导致绑定失败:
public DateTime? BirthDay { get; set; }
使用时增加空值判断:
$"生日:{member.BirthDay?.ToShortDateString() ?? "未填写"}"
内容的提问来源于stack exchange,提问作者Stephen
相关产品推荐
相关产品推荐

