.net6.0 mvc 传递 model 实体参数(无法对 null 引用执行运行时绑定)

说一下情况:

代码没问题,能成功从数据库里查到数据,能将数据丢给ViewBag.XXXX, 在View页面也能获取到 ViewBag.XXXX的值,但是发布到线上后报这个错:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 null 引用执行运行时绑定

点击查看大侠的分析(报错原因类似):https://blog.csdn.net/catshitone/article/details/99718151


就这样实体直接就没了!加了 ViewBag.XXXX != null 的判断都没用,页面直接蹦,

无法对 null 引用执行运行时绑定,估计是.net6.0的bug,不是我的问题 .... 嗯嗯...

所以我认为 ViewBag.XXXX 和 ViewDate["XXXX"] 这样传递实体数据不是很靠谱,

传递简单的 int还有string的值的问题还不大,传递复杂实体的话,靠 dynamic 类型去编译,

估计会找不到他的对应的实体类Class .... 导致 实体数据不为空,但是找不到实体里的属性值 ...


还是老老实实的用 View去传递实体:

Controler:

cs 复制代码
        public ActionResult TaskEdit()
        {
            string TaskID = HttpContext.Request["TaskID"] == null ? "" : HttpContext.Request["TaskID"].ToString();//url参数
            PMP_Task Task = taskBLL.GetTask(TaskID);//一个实体数据,不为空     
            ViewBag.RoleUsers = roleBLL.GetRoleUsers();//一个实体List

            return View(Task);//传递实体值
        }

View:

html 复制代码
@model XrErp.Model.PMP_Task   //指定传递来的实体值的类型
@using XrErp.Model
@{
    Layout = null;
}

<html>
<body>

<!-------直接用:Model 作为实体值来用 ----------->

<select id="TeamMember" class="my-css" multiple="multiple">
    @{
        if (ViewBag.RoleUsers != null && ViewBag.RoleUsers.Count > 0)
        {
            for (int i = 0; i < ViewBag.RoleUsers.Count; i++)
            {
                if (Model != null && Model.TeamMember.Contains(ViewBag.RoleUsers[i].Username))
                {
                    <option value="@ViewBag.RoleUsers[i].UserID" selected>@ViewBag.RoleUsers[i].Username</option>
                }
                else
                {
                    <option value="@ViewBag.RoleUsers[i].UserID">@ViewBag.RoleUsers[i].Username</option>
                }
            }
        }
    }
</select>

<input type="number" id="ManHour" placeholder="0.0" value="@Model.ManHour"  />

<input type="date" id="TaskStartDate" value="@Model.TaskStartDate.ToString("yyyy-MM-dd")"/>


</body>
</html>

这样就不会报:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 null 引用执行运行时绑定

的错了


本解决方法参考于:https://www.cnblogs.com/objectnull/p/9240160.html

另外注意Model的M大小写https://blog.csdn.net/foren_whb/article/details/80665438

(声明类型的时候用小m{@model},调用的时候用大M{@Model})

相关推荐
Cyan_RA912 小时前
SpringMVC REST 详解
java·spring·mvc·springmvc·restful·jquery·jsp
budingxiaomoli3 天前
Spring Web MVC 知识总结
spring·mvc
虾米Life5 天前
MVC与MVVM 架构
架构·mvc·mvvm
笛卡尔的心跳6 天前
Spring MVC 注解
java·spring·mvc
小松加哲7 天前
Spring MVC 核心原理全解析
java·spring·mvc
那个失眠的夜7 天前
RESTful 语法规范 核心注解详解
java·spring·mvc·mybatis
羌俊恩8 天前
Centos环境django项目部署过程
django·flask·centos·mvc·mtv·web项目框架
Foreer黑爷10 天前
Spring MVC原理与源码:从请求到响应的全流程解析
java·spring·mvc
曹牧11 天前
Spring MVC中使用HttpServletRequest和HttpServletResponse
java·spring·mvc
曹牧11 天前
Spring MVC配置文件
java·spring·mvc