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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 01:27:04