将值从1个代码页面转移到另一个代码后,有哪些不同的方法? 隐藏的文件可以在没有表单标签的情 我在页面后面有两个代码。我需要从1页传输特定值并在页面后面的其他代码中获取。 在这种情况下,最好的方法是什么?
注意:由于要传输的字符串的大小很大,我们不能使用Querystring。
答案 0 :(得分:3)
您可以使用跨页面发布。使用它时,您只需指定其他页面应处理回发,请参阅此链接:http://msdn.microsoft.com/en-us/library/ms178139.aspx
我通常不建议使用会话变量,因为它们会降低应用程序的可伸缩性,并且它们无法与浏览器后退按钮一起使用
编辑: 另一种选择可能是将数据存储在当前的HttpContext中,然后使用Server.Transfer
HttpContext.Current.Items["tempData"] = yourLongData;
Server.Transfer("NewPage.aspx");
在新页面上,您可以从HttpContext中读取值。这将起作用,因为新页面在同一请求中处理,因此相同的上下文。
但这不会导致客户端重定向,因此可能并不适用于所有情况
答案 1 :(得分:1)
Querystring它将成为赢家。
虽然如果是您试图从一个页面调用另一个页面的代码,那么听起来您可能遇到了麻烦。您从两个页面调用的代码应该在类库中,但如果是这样的话,这个答案会很长,有些人可能会说这个问题太开放了。
答案 2 :(得分:1)
第一页
//create a unique key
string guid = Guid.NewGuid().ToString();
//store large data in the session
Session[guid] = BIG_VALUE_TO_TRANSFER;
//redirect to new page, passing key as parameter
Response.Redirect("SecondPage.aspx?guid="+guid");
第二页
//retrieve data from session using the key in the querystring
//you should really validate this but i can't be bothered
BIG_TYPE bigvalue = (BIG_TYPE)Session[Request.QueryString["guid"]];
答案 3 :(得分:1)
使用会为您完成工作的会话,但由于会话应包含会话特定数据,您必须正确使用它,您也可以使用Server.Transfer
答案 4 :(得分:0)
如果没有表单标记,隐藏字段将无法运行。
a)您可以发布将特定值放入隐藏字段或文本字段的页面,并通过string MyVal = Request.Form["FieldName"];
b)您可以通过查询字符串发送值。假设你用val = 6重定向到default2.aspx,例如Response.Redirect("default2.aspx?val=6");
并通过
string MyVal = Request.QueryString["val"].ToString();
答案 5 :(得分:0)
您可以将值存储在Session中。如果并发是一个问题,您可以使用唯一键(如guid)并在查询字符串中传递密钥。
答案 6 :(得分:0)
要将控件从一个页面传输到另一个页面,您可以使用
Server.Transfer ( "newpage.aspx" );
方法
并且为了将值从一个页面传递到另一个页面,您可以使用Context
Context.Items["Value1"] = "value to pass";
并将目标页面中的值检索为
string val = Context.Items["Value1"].ToString(); // check for null
查询字符串的最大长度在不同的浏览器中会有所不同。
通过查询字符串传递敏感信息也不是一个好方法。
Response.Redirect涉及往返 到服务器而Server.Transfer 通过避免来节省服务器资源 往返。它只是改变了 网络服务器的重点是一个不同的 页面并传输页面处理 到另一页。
如果您正在使用Server.Transfer 你可以直接访问这些值, 控件和属性 上一页,你不能做 的Response.Redirect。
Response.Redirect更改了网址 浏览器的地址栏。他们可以 被加入书签。而Server.Transfer 保留原始网址 浏览器的地址栏。它只是 替换以前的内容 新页面。
Response.Redirect可用于两者 .aspx和html页面 Server.Transfer只能用于 .aspx页面并且特定于ASP和 ASP.NET。
Response.Redirect可用于 将用户重定向到外部 网站。可以使用Server.Transfer 仅在运行相同的网站上 服务器。您不能使用Server.Transfer 将用户重定向到正在运行的页面 在另一台服务器上。
答案 7 :(得分:0)
对于真正大块的数据,您无法将所有数据发送到客户端,只是为了回来。当您将值作为表单字段或查询字符串时,这实际上就是您所做的。您将耗尽带宽并降低用户体验。
在会话中存储大量数据是非常糟糕的主意。它是在进程中使用你的服务器主内存,或者它被序列化到另一个服务器(状态服务器),或者存储在数据库(Sql状态)中。为每个请求检索会话数据。这是总性能杀手。
如果您确实需要将大量数据从一个页面传递到下一个页面,请评估您的一致性需求。如果它真的是事务性的,也许你需要咬紧牙关并存储在数据库中。如有必要,可以检索其他页面。
大多数数据库可以(有效地)存储您向其投入的任何数据量,但如果您不需要数据库为您提供的一致性,请不要滥用数据库。在我的头顶,我会去大约8k的数据。我认识到varchar(max)等,但你需要评估存储所有(瞬态)数据,日志空间等的权衡。
否则,在共享网络磁盘上创建临时文件并传递令牌并没有错。使用guid和日期生成唯一的文件名。