如何将值传递给asp mvc razor中的强类型视图

时间:2012-09-07 17:47:25

标签: asp.net-mvc razor

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

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')

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

3 个答案:

答案 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);