【问题标题】:Viewbag: Cannot perform runtime binding on a null reference errorViewbag:无法对空引用执行运行时绑定错误
【发布时间】:2020-02-29 18:46:00
【问题描述】:

控制器

  [HttpPost]
        public ActionResult AddEmployee(EmpModel emp)
        {
            try
            {
                if(ModelState.IsValid)
                {
                    EmpRepository empRepository = new EmpRepository();
                    empRepository.AddEmployee(emp);
                    ViewBag.Message("Employee Record Successfully");
                }                

                return View(new EmpModel());
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

查看

<div class="col-md-offset-2 col-md-10">
    @ViewBag.Message
</div>

得到我在这个问题的标题中提到的异常。我在这里错过了什么?

【问题讨论】:

  • 如果模型状态无效,则不会设置消息。因此,存在不会填充 Message 的潜在情况。也许这就是问题所在?
  • P.S.一般而言,catch(Exception ex) { throw ex; } 是一种反模式,没有任何效果(除了浪费 CPU 周期)。如果您只是要重新抛出完全相同的异常,那么该子句的意义何在?捕捉应该是有原因的 - 例如。通常用于记录错误,对用户隐藏它,防止程序崩溃并转移到其他更可接受​​的状态(例如,显示用户友好的消息,允许重试或类似的)。仅仅为了重新投掷而抓捕是完全没有意义的。
  • @ADyson 它通过了那个条件并且完美地存储在数据库中的所有数据。当涉及到 Viewbag 时,它会捕获异常。
  • @ADyson 你是对的.. 只是放在那里,因为消息没有显示在视图中。检查我是否添加了 try catch .. 不过感谢您提供的信息。

标签: asp.net-mvc


【解决方案1】:

使用以下语法将值填充到 viewbag 的第一件事

ViewBag.Message = "put your content";

根据您的代码还有一件事,viewbag 仅在您的模型状态验证完成时才存在,因此请确保您在使用前检查了视图 (.cshtml) 上的 null。

【讨论】:

  • @Krish 如果对您有帮助,您应该考虑通过单击复选标记来接受此答案。
【解决方案2】:

只是改了下面的代码

ViewBag.Message("Employee Record Successfully");

ViewBag.Message = "Employee Record Successfully";

【讨论】:

  • @KaranEkkawala 是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多