2016-01-05 36 views
0

对于一个网站,请考虑以下情况:正确地传递复杂对象不使用的TempData/ViewBag/ViewData的

  1. 用户输入数据,包括ID,并提交
  2. 一个相关的控制器将处理请求。此时,将创建一个复杂对象(通过调用具有该ID的Web服务)以进行一系列操作。 e.g校验等
  3. 返回用户的特定视图
  4. 用户输入另一组数据并提交
  5. 另一个控制器将处理此请求。它需要在第2步

等使用的复杂的对象...

目前,在步骤5中,我将使用ID来再次获得所需的复杂对象调用Web服务。

有没有任何正确/有效的方法,而不使用TempData/ViewBag/ViewData,以便我可以在第2步中重用复杂的对象,一旦它被创建?

编辑: 会话也是不允许的。

+0

通过使用会话。 – CodeCaster

+0

目前还不清楚为什么你的对象是由Web服务创建的,而不是仅仅在步骤2中使用模型绑定。你可以发布你的相关操作方法吗? – NightOwl888

+0

为什么你不创建视图模型并使用会话来达到这个目的? –

回答

1

通常,对于web application,根据您的需要可以有多种选项来存储复杂的对象。我不认为有这样做的BEST方式,只有最合适的方式和每一个解决方案,将带着利弊


服务器端

  • 会议我知道你说不能使用会话,但我只是想包括它):第一个选项浮现在脑海,适合大多数web应用程序阳离子。由于现代网络的发展更多的是STATELESS,很多人都希望不惜一切代价避免使用Session。然而,里有一些特定的基础设施配置,以支持会议无国籍应用程序,例如distributed sessionsticky session或者你可以在一个dedicated serverdatabase保存会话。

    • 的观光:简单易用,支持Web应用程序自然
    • 缺点:需要配置很多东西与无状态应用
  • 另一个专用服务器(工作之前有人问,我把它放在服务器端部分,即使它是另一台服务器,但对我来说,无论我们的控制是SERVER SIDE) :这里有几个选项供您选择,第一个选项可能是设置缓存服务器(Redis?)并使用密钥(类似于会话)检索/保存,或者您可以简单地编写应用程序以使用您自己的方法检索/保存逻辑。

    • 的观光:可重用性,扩展性,适用于所有的
    • 缺点应用不只是网络,有自己的范围:难以建立
  • 数据库:不是很明显但数据库确实支持这种要求

    • 的观光:可重用性,扩展性,适用于所有的应用程序而不只是网络
    • 缺点:性能问题
  • 其他内存选项(TempData的,ViewBag等)

    • PROS:易于使用,良好的ASP支持。NET MVC
    • 缺点:somtimes很难绕过多个视图

客户端

  • 有这么多的选择在这里选择像使用隐藏字段,Cookie的localStoragesessionStorage的,等等,甚至一个简单的查询字符串,将工作
  • 的观光:速度(因为你不需要客户端 - 服务器交通)
  • 缺点:安全(你不能信任来自客户端的任何东西),不是太复杂的对象(重物),安全性(敏感数据)做的很好,等

建议的解决方案

我希望我正确地理解你的问题,但在我看来,你不应该存储复杂的对象,只需将复杂对象的ID存储在的地方您的选择,并进行查询每次需要这个对象。所以你的对象总是最新的,你不会浪费资源来存储复杂的对象。

希望它可以帮助你。

+0

虽然它没有完全解决我的问题,但利弊是建设性的。谢谢。 –

0

如果要将对象投影到某个视图,然后忘记任何存储(TempData/ViewBag/ViewData/Session),然后将同一对象发布到另一个控制器,则可以重新构建对象的最佳方式将对象的属性存储为隐藏的<input>控件。

+0

为什么这是“最好”的方式?然后,您必须让所有链接都做POST,并且您不能相信用户输入。 – CodeCaster

+0

当然这只是一般的想法,你还应该加密并签名 - 这样用户将无法以纯文本查看它,并且它们将无法在响应中伪造不同的值。 –

+2

这不是你的答案,使它变得更加复杂。 – CodeCaster

相关问题