2013-04-09 20 views
2

我有一个创建TempData的对象怎样才能TempData的对象识别MVC4

TempData["Message"] = new Message {Text = txtMessage, Success = false}; 

然后我在视图中阅读到TempData就像

@{var message = TempData["Message"];} 

但是一个ActionMethod当我尝试使用var“message.Success”编译器不能识别该属性。当我在调试期间看到var消息和TempData时,我可以看到Object的txtMessage和Success值。我错过了什么?

+1

你应该使用ViewBag像这样的东西。 TempData用于在不同请求之间存储数据。 – 2013-04-09 17:13:02

+0

消息可能需要经过重定向; ViewBag数据不会。 – 2013-04-09 17:20:36

+0

@JeremyHolovacs,*如果消息需要“生存重定向”,ViewBag将无法工作。最有可能的是,它只是在视图中使用。 – 2013-04-09 17:39:24

回答

3

尝试

@{dynamic message = TempData["Message"];} 

@{Message message = TempData["Message"] as Message;} 

,或者,如果你知道它会永远只能是一个信息

@{Message message = (Message)TempData["Message"];} 
+0

当我使用动态时,它不允许我改变消息!= null – 2013-04-09 17:33:52

+0

那么不要那样做。如果必须使用Message类。即使它为空也可以工作。 – 2013-04-09 17:37:32

+0

当我使用动态时,它不允许将'message!= null'进行变化,并且不会识别message.Success三元操作。我试图使用message.Equals,但没有奏效。当我使用消息时,它说它不能将对象转换为目标类型消息。 – 2013-04-09 17:42:50

1

我不相信TempData是动态类型,所以你需要投它。但是,对于匿名类型,您不能这样做。您将需要将您的匿名类型转换为实际的类。

如果你不想这样做,你可能会使用ViewBag,而不是动态类型。