如何在不使用Session的情况下将对象从Asp.net MVC控制器发送到Asp.Net WebForm?

时间:2014-02-01 13:06:56

标签: asp.net asp.net-mvc

实际上我想从控制器动作向webform加载方法发送一个对象。 我不喜欢使用Session或QueryString。

2 个答案:

答案 0 :(得分:1)

如果这两个页面都在不同的域中

从MVC控制器操作中创建HttpWebRequest到webform页面,在HttpWebRequest的Request主体中发送要发送的数据。在检索方面,您可以使用Request对象并读取数据。

如果两个网页都在同一个域中

你可以使用Cache(服务器端),Cookies(客户端),Hiddenfields(从MVC控制器到ASPX页面的Form Post)

答案 1 :(得分:1)

根据我的理解,您希望在稍后的Webforms请求中使用您在MVC请求中创建的某个对象。
除了使用Session变量或QueryString之外,您还可以将对象数据存储在cookie中并在WebForm中检索它。
每个选项都有其优点:

  • 会话变量:对象可以按原样存储,无需重新加载,例如来自数据库。降低可伸缩性,因为每个用户都使用服务器内存。
  • 查询字符串:数据可见,仅适用于短字符串。
  • Cookie:数据存储在客户端上,可以被篡改。在服务器和客户端之间多次传输。尺寸限制适用。 Cookies可能会被禁用。

处理大量数据

在评论中你提到数据是巨大的。因此,我建议在MVC部件上生成数据后存储数据,例如,在数据库(甚至文件系统)中,只需通过上述方法之一传输在Webforms端检索数据所需的id。您可能还需要在使用后删除准备好的数据,或者在一段时间后删除准备好的数据,以便清理剩余的数据。

重新制作网络表单中的数据

如果您不想将数据存储在某种缓存(数据库,文件,服务器缓存)中,并且您可以在Webforms请求中重新创建数据(显然您可以在其中创建大量数据) MVC请求),您也可以选择仅将该位数据传输到重新创建数据所需的Webform。性能差,但很好,因为用户总是会收到最新信息,如果不再需要数据,您就不必清理缓存。
为了能够共享在MVC控制器和Webform之间创建数据的功能,您应该将其移动到两个Web前端中使用的专用类。