0

在我的一项行动中,我得到了这个:

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

视图绑定到的模型是预期将在发布操作上处理的模型,并且是我要在视图或上一个(获取)操作上分配值的模型。我只想从'get action'传递一个值'a'来查看,分配'model.a' ='a',然后在'post action'上处理'model'(附加'a') .

我从日志中可以看出,绑定到视图的模型和从“获取操作”传递给视图的模型是不同的实例。

4

3 回答 3

1

您没有将对象传递给视图,因此Model为 null,因此尝试写入该Attr属性时抛出。

在这里传递一些东西:

ViewBag.Val = "a val";
View(new SomeModelTypeYadaYadaThatCorrespondsToTheView());

Michal Klouda 的评论也是正确的,你的做法是错误的。您需要填充的值应该在构建模型时完成,而不是在视图渲染期间完成。

于 2012-09-07T17:49:35.320 回答
0

我认为您可以将其添加到您的 .cshtml 文件中(我认为您没有):

    @model YourModelNameSpace.YourModel

这将为您提供一个不为空的强类型模型。

于 2012-09-07T18:42:42.837 回答
0

您需要在 Action 方法中返回View 并传递 Model。

ViewBag.Val = "a val";
return View(YourModel);
于 2012-09-07T18:51:17.967 回答