C# 将数据从控制器发送到视图的最安全、最干净的方式是什么?

C# 将数据从控制器发送到视图的最安全、最干净的方式是什么?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我有一个问题,我在寻找答案,我看到了这个问题的答案 在回答中,许多人提到使用ViewBag或ViewData都是“安全的”。我不明白为什么,因为我不熟悉web应用程序和它的整个概念,也不熟悉MVC。因此,我的问题是: 为什么ViewBag和ViewData不是传递数据的安全方式 传递数据的最佳方式是什么?(最重要的问题) 我真的很感谢你的帮助 一直有争论。我总是使用特定的视图模型 您也可以使用ViewBag或ViewData,但不是首选 ViewData不安全,因为 ViewData[“foo

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

在回答中,许多人提到使用ViewBag或ViewData都是“安全的”。我不明白为什么,因为我不熟悉web应用程序和它的整个概念,也不熟悉MVC。因此,我的问题是:

  • 为什么ViewBag和ViewData不是传递数据的安全方式
  • 传递数据的最佳方式是什么?(最重要的问题)

  • 我真的很感谢你的帮助

    一直有争论。我总是使用特定的视图模型

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

    ViewData不安全,因为

    ViewData[“foo”]
    可能未在控制器中设置,但您尝试访问它,因此会失败。因此,引入了
    ViewBag
    ,它使用了语言的动态特性


    因此ViewData更安全一些。然而,作为一个好的设计,为每个视图创建视图模型对象是理想的

    另一种选择是强类型模型对象。有些人更喜欢这种方式,因为它可以防止在使用动态ViewBag对象时出现某些运行时异常。它还允许一些有用的IDE特性,比如自动完成,并倾向于生成更可读的代码

    这里有一个很好的例子,描述了不同的选项,您可能会发现这些选项很有用


    如果强类型选项看起来像是您想要学习的内容,那么本教程可能会很有用:

    如果不喜欢ViewBag和ViewData,那么还有什么比这更好?我这么问是因为这是我所知道的传递数据的唯一方法。我写了它,每个视图一个视图模型。您可以为每个视图创建一个类,该类将包含页面上的实体。