代码之家  ›  专栏  ›  技术社区  ›  Josh

MVC模型最佳实践-如何处理非用户输入数据

  •  2
  • Josh  · 技术社区  · 14 年前

    所以,我的问题是我有一个模型。我的模型中有一些数据是根据通过url传入的id填充的,并设置为cookie,其余的是用户输入,使用数据注释验证。

    我遇到的“问题”是如何处理这个非用户输入数据。我是将它放在隐藏的控件中,从而增大(尽管只是稍微)我的页面大小,还是在每次回发时“重建”模型的那一部分,这会增加数据库和回发的另一个行程。

    我知道这是主观的,但我很好奇标准做法是什么。把数据放在一个隐藏字段中是最简单的方法,但是仅仅为了把它带回来而放弃viewstate是不对的,即使是以小块的形式。另外,这会让你的数据暴露给用户-不是说他们不能调整网址。没有人喜欢不必要的数据库访问。

    哦,我不能用会话。此应用程序在负载平衡的环境中运行。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Nick Larsen    14 年前

    把id留在url中就行了。url无论如何都应该标识一个资源,因此从url中取出参数并以任何其他方式存储它只是做额外的工作,使url无法标识您正在访问的资源。

    如果您有其他需要发送的数据,则在隐藏字段中发送标识符是非常常见的做法,与其他字段一样对其进行验证。如果您可以推断出信息服务器端,那么就需要权衡重建数据和较大请求的成本。在测试期间,您必须测量哪个对您的应用程序更好,但这两种方法在实践中都很常见。当你做决定的时候不要忘记安全问题,然而,这并不是所有的性能。

    另外,如果数据来自客户机,不管你认为你有多聪明地隐藏它,它仍然是用户输入。这意味着即使你没有给他们一个控件来编辑屏幕上的值,一个半知半解的用户也会知道如何更改它。

        2
  •  1
  •   CodeTwice    14 年前

    我不认为viewstate是可行的,因为它向浏览器公开了内部数据,而且也不必要地增加了流量。

    如果我必须解决这个问题,我会使用会话来存储与会话相关的数据。如果是负载平衡的环境,那么您将需要分布式会话处理。解决这个问题最简单的方法就是启动一个ASP.NET状态服务并开始使用它来处理会话。

    this ,不幸的是,它似乎不再处于开发阶段。

        3
  •  1
  •   Omu    14 年前

    如果你每次都能从你的DAL那里得到它会更好,

    假设你得到一个用户,并把他的密码隐藏在一个输入中,仅仅因为你不想每次都得到它。

    或者你把一些东西放在隐藏的输入中并使用 firebug有人更改了这些输入的值