从控制器向视图发送数据的最安全,最干净的方法是什么?

时间:2012-11-23 06:29:17

标签: c# asp.net-mvc-3

我有这个问题我正在寻找答案,我看到了这个问题的答案

What's the difference between ViewData and ViewBag?

在答案中,许多人提到既不使用ViewBag也不使用ViewData是“安全的”。我不明白为什么因为我不熟悉Web应用程序及其整体概念以及整体MVC。所以我的问题是:

  1. 为什么ViewBag和ViewData不是传递数据的安全方式?
  2. 传递数据的最佳方式是什么? (最重要的问题)
  3. 我真的很感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

有争论。我总是使用特定的View Models。

您也可以使用ViewBag或ViewData,但不是首选。

ViewData不安全,因为

可能未在控制器中设置

ViewData["foo"],但您尝试访问它,因此您将失败。因此引入了ViewBag,其使用语言的动态特征。

所以ViewData更安全一些。但是,作为一个很好的设计,每个视图创建视图模型对象是理想的。

答案 1 :(得分:1)

替代方案是强类型模型对象。有些人更喜欢这个,因为它可以防止在使用动态ViewBag对象时可能发生的一些运行时异常。它还允许自动完成等有用的IDE功能,并且往往会产生更易读的代码。

有一个很好的blog post from Microsoft's Rick Anderson描述并提供了不同选项的示例,您可能会觉得这些选项很有用。

如果强类型选项看起来像你想要追求的东西,那么本教程可能很有用:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller