在我的一个行动中,我得到了这个:
ViewBag.Val = "a val";
View();
相关视图:
@{
Model.Attr = ViewBag.Val;
}
异常详情:
System.NullReferenceException: Object reference not set to an instance of an object.
...
Line 27: Model.Attr = ViewBag.Val;
这是引起麻烦的实线,如果它是如何将值传递给视图并将模型属性设置为该值。
修改
我已经执行了,分配工作正常:
采取行动:
var Obj = MyModel();
Obj.Attr = 123;
return View(Obj);
视图:
<p>@Model.Attr</p> // shows 123
但是在接收MyModel的帖子操作上,MyModel.Atrr为0。
为什么会发生这种情况以及如何解决它。
修改2
视图绑定的模型是期望在post操作上执行的模型,并且是我想在视图或上一个(get)操作上分配值的模型。我只是想从'get action'传递值'a'来查看,分配'model.a'='a',然后在'post action'处理'model'(附加'a')
我从日志中可以看出,绑定到视图的模型和从“获取操作”传递给视图的模型是不同的实例。
答案 0 :(得分:1)
您没有将对象传递给视图,因此Model
为空,因此尝试写入Attr
属性时抛出。
在这里传递一些东西:
ViewBag.Val = "a val";
View(new SomeModelTypeYadaYadaThatCorrespondsToTheView());
Michal Klouda的评论也是正确的,你这样做是错误的。您需要填充的值应在构建模型时完成,在视图渲染过程中不。
答案 1 :(得分:0)
我认为你可以将它添加到你的.cshtml文件中(我认为你没有):
@model YourModelNameSpace.YourModel
这将为您提供一个非空的强类型模型。
答案 2 :(得分:0)
您需要返回您的Action方法中的视图并传递模型。
ViewBag.Val = "a val";
return View(YourModel);